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

悄悄话
发表文章: 3
注册时间: 2003年08月27日 13:37
关于Decorator的心得,求探讨 2003年08月28日 15:06 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 decorator模式(17)     
我觉得在Decorator模式中,如果实现装饰的Decorator只有一个的话,也就是说,只要给Decoratee增加一个工能的话,使用Decorator的优势并不是很大,Decorator模式的真正的威力在于对于一个被装饰(被油漆)的Decoratee提供多个Decorator的时候,也就是说,有多个额外的功能要被动态的刷到Decoratee中去,而这些功能在编译阶段并不能确定要具体增加那一些,而且增加的这些功能还有可能通过不同的组合完成不同的功能,这个时候使用Decorator模式的优势就很大了.比如下面几行代码中:
A a = new Decorator1 ( new Decorator2() );
a.doSomething();
A b = new Decorator2 ( new Decorator1() );
b.doSomething() ;
a.doSomething()和b.doSomething()完成的功能就可以完全不一样,如果不止两个Decorator的话,这样的组合就更多,通过不同的组合提供不同的功能就很简单了.我看到很多讲Decorator的例子基本上都是基于一个Decorator来给Decoratee刷上增值功能,<java 与模式>里的那个发票的例子讲得比较好,它通过两个Decoratoe(HeaderDecorator和FooterDecorator)来为同一个Decoratee(SalesOrder)提供不同的功能.大家可以参考探讨一下.
banq

悄悄话
发表文章: 9524
注册时间: 2002年08月03日 17:08
Re: 关于Decorator的心得,求探讨 2003年08月28日 16:32 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
不错, Decorator模式重要一点是接口没有变。
xuruihao

悄悄话
发表文章: 3
注册时间: 2003年08月27日 13:37
Re: 关于Decorator的心得,求探讨 2003年08月28日 18:30 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
接口没有变是根本,有另外一点也很重要,就是抽象Decorator要有一个被装饰类(具体类或者抽象类)的实例,通过这个实例来调用抽象接口的功能,而不是简单的在Decorator(抽象的或者具体的)的子类中直接通过super来调用.
banq

悄悄话
发表文章: 9524
注册时间: 2002年08月03日 17:08
Re: 关于Decorator的心得,求探讨 2003年08月29日 10:50 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
后者和Adapter模式就类似了。
relive

悄悄话
发表文章: 8
注册时间: 2003年08月18日 17:00
Re: 关于Decorator的心得,求探讨 2003年09月10日 17:36 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
"Decorator模式的真正的威力在于对于一个被装饰(被油漆)的Decoratee提供多个Decorator的时候,也就是说,有多个额外的功能要被动态的刷到Decoratee中去,而这些功能在编译阶段并不能确定要具体增加那一些,而且增加的这些功能还有可能通过不同的组合完成不同的功能,这个时候使用Decorator模式的优势就很大了."

被装卸的功能多了,很可能就变成灾难了。如果A a = new Decorator1 ( new Decorator2() );是可以接受的话,那么A a = new Decorator1 ( new Decorator2(new Decorator3(new Decorator4(new Decorator5(new Decorator6(new Decorator7()))))) );的感觉如何。
并且,实际使用中,并不是new Decorator1,2,3这种规则排列,而是一堆名字相似的CLASS互为构造器的入参。想体念这种感觉,写一个特别复杂的JAVA IO就可以体念到了。个人认为,这种代码难写难读,也就谈不上好维护了。

本质上,Decorator通过继承增加功能,当功能组合特别复杂时,n层的继承就不可避免了。这种情况下,倒不如增加一个组合上述功能的代理类,感觉更好一些。这样,就用n个类的组合代替了n层的继承。接口也不会发生变化。

纯Decorator模式,只合适用在增加2-4个功能的情况吧.



banq

悄悄话
发表文章: 9524
注册时间: 2002年08月03日 17:08
Re: 关于Decorator的心得,求探讨 2003年09月12日 08:32 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
是这样,Decorator模式本身就是刷油漆的意思,油漆本身就是有轻、薄的含义。

如果增加功能很多,复杂,那根据设计目标选择其它模式了。
这个主题有 5 回复 / 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链接 插入附件
内容
  每2分种自动备份发贴内容Ctrl-V粘贴取出,提问题前先查询标签列表

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

anti spam