JiveJdon Community Forums
在线75人   首页   主题总表   培训咨询   精华   查搜   注册    登陆
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 1 回复 / 1
 发表新帖子   回复该主题贴
thinkjava

悄悄话
发表文章: 110
注册时间: 2007年11月03日 19:22
你好banq,请教模式 2006年10月17日 10:34 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 decorator模式(12)      bridge模式(7)      设计模式(142)     
我的理解对不对呀?谢谢回答?
Decorator(油漆工)模式:实质就是给一个对象动态添加功能,具体是有一个类A,A假设只有一个功能或没有我所想要的功能,但A类不能修改,怎么办?我就可以写一个Decorator油漆工类,让这个类帮我给A类添加功能,编译期间A根本不知道要给他添加什么功能,只有在运行期间才知道.因为有不同的Decorator类,所以,给A添加功能可以看成是动态的?相当于一个只有A功能的类让别一个B类包装,则B类就除了有A功能,还有B中新添加的功能.
>Bridge模式:就是将抽象和行为分开,分别都有自己的接口和实现,这样,抽象可以任意添加,行为也可以任意添加,而互相不影响各自,比如记日志,日志是接口,有不同的实现:TXT日志,DB日志,行为是怎么记法?在.NET和JAVA平台下有不同的记法,如果再添加一个记法:Other,则不需要修改任何类,这个模式主要是增强程序的可扩展性,降代类之间的耦合
>
>/**
> * 抽象接口
> */
>abstract class Log {
> protected LogImpl logImpl;// 行为
>
> public void setImpl(LogImpl logImpl) {
> this.logImpl = logImpl;
> }
>
> public abstract void write();
>}
>
>/**
> * 行为接口
> *
> */
>abstract class LogImpl {
> public abstract void writeLog();
>}
>
>/**
> * 对抽象的实现
> *
> */
>class TextLog extends Log {
>
> public void write() {
> System.out.print("write text log in ");
> logImpl.writeLog();
> }
>}
>
>/**
> * 对抽象的实现
> *
> */
>class DBLog extends Log {
> public void write() {
> System.out.print("write db log in ");
> logImpl.writeLog();
> }
>}
>
>/**
> * 对抽象的实现
> *
> */
>class OtherLog extends Log {
> public void write() {
> System.out.print("write other log in ");
> logImpl.writeLog();
> }
>}
>
>/**
> * 对行为的实现
> *
> */
>class JavaLogImpl extends LogImpl {
> public void writeLog() {
> System.out.println("java");
> }
>}
>
>/**
> * 对行为的实现
> *
> */
>class DotNetLogImpl extends LogImpl {
> public void writeLog() {
> System.out.println(".NET");
> }
>}
>
>/**
> * 对行为的实现
> *
> */
>class OtherLogImpl extends LogImpl {
> public void writeLog() {
> System.out.println("other");
> }
>}
>
>public class TestBridgePattern {
>
> /**
> * @param args
> */
> public static void main(String[] args) {
> // TODO Auto-generated method stub
> // .NET平台下的Database log
> Log dblog = new DBLog();
> dblog.setImpl(new DotNetLogImpl());
> dblog.write();
> // Java平台下的TEXT log
> Log txtlog = new TextLog();
> txtlog.setImpl(new JavaLogImpl());
> txtlog.write();
>
> // 其它平台下的其它行为
> Log otherLog = new OtherLog();
> otherLog.setImpl(new OtherLogImpl());
> otherLog.write();
> }
>}
banq

悄悄话
发表文章: 9290
注册时间: 2002年08月03日 17:08
Re: 你好banq,请教模式 2006年10月17日 11:23 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
基本理解正确,Decorator(油漆工)模式和Bridge模式都是侧重于对象行为的模式,他们是结构模式,主要是用来考虑对象的行为复杂变化时,如何进行结构搭建:以使得这个结构能够适应将来行为变化。

所以这两个模式在Evans DDD中用在Service方面比较多。

>编译期间A根本不知道要给他添加什么功能,只有在运行期间才知道
这句话有些欠妥,A无论什么时候不会知道,也无须知道给他添加什么功能,这才是解耦的体现,如果他需要知道,就和新的功能耦合了。

>抽象可以任意添加,行为也可以任意添加,
模式总是在淡化一个方面,再突出另外一个方面,我们使用某个模式应付变化,正如万事万物有阴有阳,必然有其不变的地方,桥模式不变的地方时抽象,变化的是行为,也就是说:如果你的需求是抽象可能变化,那么使用桥模式就不恰当了。

当然,可以多个模式结合在一起,优缺互补,形成一个强大的框架,这也是不错的。
这个主题有 1 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam