以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 软件工程论坛 』 (http://bbs.xml.org.cn/list.asp?boardid=48) ---- Decorator模式不仅可以动态增加功能,而且可以动态减少功能 (http://bbs.xml.org.cn/dispbbs.asp?boardid=48&rootid=&id=29791) |
-- 作者:pennyliang -- 发布时间:4/2/2006 8:01:00 PM -- Decorator模式不仅可以动态增加功能,而且可以动态减少功能 任何增加或者减少功能,都是通过类型改变实现的,包一个类型就是多一个功能,去掉外面这个包,就减少了功能,体系结构考试出了个题目,让我对decorator模式有了新的理解 |
-- 作者:wcdxyl -- 发布时间:4/3/2006 10:05:00 AM -- 我补充两句,油漆模式其实就是重写父类的方法,不过用ArrayList来动态定义要油漆的内容而已。 我贴一段java代码给大家参考: 我们先建立一个接口: }
接口Work有一个具体实现:插入方形桩或圆形桩,这两个区别对Decorator是无所谓.我们以插入方形桩为例: public class SquarePeg implements Work{
现在有一个应用:需要在桩打入前,挖坑,在打入后,在桩上钉木板,这些额外的功能是动态,可能随意增加调整修改,比如,可能又需要在打桩之后钉架子(只是比喻). 那么我们使用Decorator模式,这里方形桩SquarePeg是decoratee(被刷油漆者),我们需要在decoratee上刷些"油漆",这些油漆就是那些额外的功能. public class Decorator implements Work{ private Work work; //在构造器中使用组合new方式,引入Work对象; others.add("钉木板"); public void insert(){ newMethod(); }
在上例中,我们把挖坑和钉木板都排在了打桩insert前面,这里只是举例说明额外功能次序可以任意安排. 好了,Decorator模式出来了,我们看如何调用: Work squarePeg = new SquarePeg();
|
-- 作者:jiachong -- 发布时间:4/3/2006 12:28:00 PM -- 好像一般都叫:装饰模式吧 而且这个例子似乎很难印证“动态”二字 我倒觉得这么说的话Decorator模式和AOP倒是天生一对了,AOP可以帮助Decorator实现动态的方面添加或删除(需要支持运行时编织的运行环境,例如JBoss-AOP) |
-- 作者:wcdxyl -- 发布时间:4/3/2006 12:46:00 PM -- 哦,和AOP一起用是可以的。不过这个模式的动态是指ArrayList的内容可以动态添加,只是一种模式,AOP是面向方面编程,是可以在方法体的前后添加额外代码段的,一般是处理日志。
|
-- 作者:pennyliang -- 发布时间:4/4/2006 5:27:00 PM -- 我看了你的例子,你这个应该不是Decorator模式,SquarePeg 和 work不是is a 的关系。你包装来包装去,都是满足他们同样继承了work接口,这个是可以实现功能的动态添加和去除,实现和decorator一样的效果,但是decorator是的抽象基类和子类必须满足is a的关系,是通过继承,而不是接口继承实现的。我个人这样认为。 |
-- 作者:wcdxyl -- 发布时间:4/5/2006 9:55:00 AM -- 这个例子是转贴的,你这样说的话我就确实不知道了,不如你贴一个例子大家来研究下。 其实开发模式都是人们总结的,现在提出了23种开发模式,我认为就是要提出1000种也可以,这个并不是规范。 [此贴子已经被作者于2006-4-5 13:02:15编辑过]
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |