代理模式与装饰模式的异同
来源:互联网 发布:扬州玉器加工厂 知乎 编辑:程序博客网 时间:2024/05/04 17:17
代理模式和装饰模式有很大的相似之处,看代理模式的类图,可以看做是代理模式的类图,也可以看做是装饰模式的类图,因为他们之间太像了,像到什么程度?把实现的代码改一下就是装饰模式,改回来就是代理模式。
追美女的一种方式是从她的朋友下手,让她的死党帮忙,那就离成功没有多远了。好,我们把她的死党作为这个美女的代理,开始的时候我们当然要和代理打交道了,我们用代理模式实现以下。定义一个接口,这个借口有一个behavior()方法。
- 1.public interface Girl {
- 2.
- 3. public void behavior();
- 4.
- 5.}
然后让美女类实现这个接口
- 1.public class NiceGirl implements Girl {
- 2.
- 3. private String name;
- 4. public NiceGirl(String name){
- 5. this.name = name;
- 6. }
- 7. @Override
- 8. public void behavior() {
- 9. System.out.println(this.name+"长的非常nice");
- 10. System.out.println(this.name+"说话也非常nice");
- 11.
- 12. }
- 13.
- 14.}
接下来定义代理类,代理类也实现了Girl接口,不但如此,代理类还要关联它要代理的对象,所以要定义Girl类型的一个成员变量,
- 1.import java.util.Random;
- 2.
- 3.public class GirlAgent implements Girl {
- 4.
- 5. private Girl girl;
- 6.
- 7. public GirlAgent(Girl girl) {
- 8. super();
- 9. this.girl = girl;
- 10. }
- 11.
- 12. @Override
- 13. public void behavior() {
- 14. Random rand = new Random();
- 15. if(rand.nextBoolean())
- 16. {
- 17. System.out.println("我安排你们上自习");
- 18. girl.behavior();
- 19. }
- 20. else{
- 21. System.out.println("先看你的表现,上自习以后再说");
- 22. }
- 23. }
- 24.}
OK,代理类图中的所有的类都实现了,下面编写一个测试类
- 1.public class Client {
- 2.
- 3. public static void main(String[] args) {
- 4.
- 5. Girl niceGirl = new NiceGirl("小美");
- 6.
- 7. Girl friend = new GirlAgent(niceGirl);
- 8.
- 9. friend.behavior();
- 10. }
- 11.
- 12.}
哈哈,代理模式就学会了吧。那装饰模式是怎么回事呢?装饰模式只要改动一处代码就可以了,对代理类的behavior()方法改动如下,其他的类不用动。
- @Override
- 2. public void behavior() {
- 3.
- 4.System.out.println("我家MM不但知书达礼,而且还会做饭");
- 5.girl.behavior();
- 6.
- 7. }
看出却别来了吗?只是代理类(或者说装饰类)的实现方法不同。
代理模式中,代理类对被代理的对象有控制权,决定其执行或者不执行。而装饰模式中,装饰类对代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能,仅此而已。
什么情况下用代理模式什么情况下用装饰模式呢?那就得看情况了,如果是为了给对象增加功能,那就用装饰模式。比如一个Plane类它的fly()方法中飞行速度是300m/s,那能不能实现500m/s的飞机对象呢?有装饰模式就可以实现。700m/s的呢?呵呵,装饰两次就行了。不是定义两个装饰器类,而是定义一个装饰器能够增速200m/s,然后装饰两次 0 0
- 代理模式与装饰模式的异同
- 代理模式与装饰模式的异同
- 代理模式与装饰模式的异同
- 代理模式与装饰模式的异同
- 装饰设计模式与代理设计模式的异同
- 适配器模式,装饰模式,代理模式异同
- 适配器模式,装饰模式,代理模式异同
- 适配器模式,装饰模式,代理模式异同
- 代理模式和装饰者模式的异同点比较
- 对代理模式和装饰模式异同点的理解
- 代理模式与装饰模式的区别
- 装饰模式与代理模式的区别
- 装饰模式与代理模式的区别
- 装饰模式与代理模式的区别
- 代理模式与装饰模式的区别
- 装饰模式与代理模式的区别
- 装饰模式与代理模式的区别
- 装饰模式与代理模式的区别
- 几个键盘通知
- NYOJ 题目113 字符串替换
- 语言定义的其他示例
- js下拉菜单的实现
- mark
- 代理模式与装饰模式的异同
- 你们这群渣渣,让我来拯救你们的灵魂吧!
- 资费的修改中资费名称唯一性校验(struts2+jquery+json)
- PHP中多维数组的foreach遍历
- android多分辨率多屏幕密度下UI适配方案
- ASP.NET 事件(回传)机制
- 时代周刊:苹果借 iOS 8 为智能手表打基础
- 软件项目管理经验点滴总结
- wpa_supplicant 连接无线网