浏览 2988 次
锁定老帖子 主题:Decorator模式
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-04
什么时候需要Decorator模式:它的主要功能是不改变类的代码和继承关系,为这个类增加功能。 例如我要计划做一件事情(例如 打印某段文字) public class DoWork(){ public void doWork(){ System.out.prinln("Do Work....."); } }] 可是由于工作变化,我需要在DoWork之前做另外一件事(打印一段特殊文字),并且在做完DoWork以后还要做一些简单的处理(同样是打印文字)。如何在不改变原有的继承关系的前提下实现此功能? 首先我们观察,所有的工作都是围绕做某件事情,所以我们可以抽象出一个接口。 public interface Work(){ public void doWork(); } 所以原有的类可以更改为 public class DoWork implements Work(){ public void doWork(){ System.out.println("Do Work...."); } } 我们可以考虑按照要求,我们所要添加的两个动作也是围绕的doWork()来做文章,只是具体的实现办法有些变换,我们可以不可以另外添加一个辅助的类 OtherWork,通过他来实现要求中的两个功能,并且调用原来计划要执行的工作。 public class DoAllWork implements Work(){ private Work work; //为调用原来计划需要执行的任务做准备 public DoAllWork(Work work){ this.work = work; } public void beforeWork(){ System.out.println("Before Work...."); } public void endWork(){ System.out.println("End Work...."); } public void doWork(){ beforeWork(); work.doWork(); endWork(); } } 我们测试一下,这个DoAllWork是不是能完成我们的需要 public class Main(){ public static void main(String[] args){ Work work = new DoWork(); DoAllWork daw = new DoAllWork(work); daw.doWork; } } OK,运行一下,一切都以实现 :) 这种通过简单的一个实现类,帮助我们达到了要求,这种模式就是Decorator模式。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-05-05
不错。受益了。呵呵 接口带来的好处是显而易见了。
|
|
返回顶楼 | |
发表时间:2008-05-19
看上去更像代理模式
|
|
返回顶楼 | |
发表时间:2008-06-03
jbon 写道 看上去更像代理模式 看上去很象静态代理.哈哈... |
|
返回顶楼 | |
发表时间:2008-06-03
jbon 写道 看上去更像代理模式
赞同!! |
|
返回顶楼 | |
发表时间:2008-06-03
希望以后发的时候能够注意一下错误
|
|
返回顶楼 | |
发表时间:2008-06-11
还是要修改啊,原来得dowork不实现接口啊
|
|
返回顶楼 | |