`
云上太阳
  • 浏览: 128496 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

设计模式-代理模式和装饰设计模式

阅读更多

一、代理模式和装饰设计模式

                                                                                    ——我一直不太信任自己的记忆力,所以我把它们都写下来

 

    为啥把这两个模式放在一起写呢?因为代理模式和装饰设计模式让人傻傻分不清楚。看了好多文章,都只是说二者的区别是:装饰设计模式是添加功能,代理模式是限制功能。太特么难理解了,我相信这篇博客肯定能让你清晰的区分装饰设计模式和代理模式。下面分别说明装饰设计模式和代理模式,然后详细说明二者的区别。

 

一、装饰设计模式

装饰设计模式:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

说明:对原有类进行扩展(也就是上面所说的添加功能)。

 

比如有这样一个需求:有个发送信息的功能,现在需要在发送信息前添加发送时间。

    下面是原有的功能:

/**信息接口*/
interface Message{
   public void sendMsg(String content);
}

/**发送短信*/
class Sms implements Message{
    public void sendMsg(String content){
        System.out.println("信息内容:"+content);
    }
}

/**模拟发送信息测试*/
class Test{
    @Test
    public void test(){
        Message msg = Sms();
        msg.sendMsg("你今天好骚!");//控制台打印出信息内容
    }
}

   

    下面是添加功能后的代码

//Message接口和Sms类和上面一样;

//下面是装饰对象
class Sms_new implements Message{
    Sms sms;
    public Sms_new(Sms sms){
        this.sms = sms;
    }
    public void sendMsg(String content){
        System.out.println("当前时间:"+new Date());
        sms.sendMsg(content);
    }
}

/**模拟发送信息测试*/
class Test{
    @Test
    public void test(){
        Message msg = Sms_new(new Sms());
        msg.sendMsg("你今天好骚!");//控制台打印出当前时间和信息内容
    }
}

 发现了没,装饰着模式只有对原有类的增加一层装饰(增加显示时间功能),并没有对原有类的控制权。比如说颠覆原有类的功能。代理模式是代理类拥有原有类的引用,主动权在代理类的手里,有它决定原有类的功能。看看代理模式

 

二.代理模式

    

代理设计模式:在不必改变原类文件和使用继承的情况下,控制对象的访问。

说明:装饰设计模式强调的是扩展,代理模式强调的是控制。

同样是上面装饰着模式的例子,我们把装饰类修改下;就立马变成代理设计模式了

//只对会员发送信息
class Sms_new implements Message{
    Sms sms;
    public Sms_new(Sms sms){
        this.sms = sms;
    }
    public void sendMsg(String content){
        System.out.println("当前时间:"+new Date());
        if(isVip()){
              sms.sendMsg(content);
        }eles{
              System.out.println("抱歉,你没有权限"):
        }
        
    }
}

 代理模式强调的控制就像上面例子一样,被代理类的功能是可以不被代理类执行的。到这里,我相信你已经基本上明白装饰着模式和代理模式的区别了。

      这里只是简单的说明下两种模式的概念和区别。实际运用上还是有很多难点的,比如代理模式分静态代理和动态代理,静态代理实用性不是很高,就像上面我们列举的例子。动态代理想研究透彻也是比较困难的,目前有两种的实现方式:JDK方式和CGLIB方式。这个以后再写

 

    

分享到:
评论

相关推荐

    设计模式课件大全

    设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略...

    设计模式-C++

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    设计模式--C++

    1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    23种设计模式 -设计模式图解.7z

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    Java 经典设计模式讲解以及项目实战

    设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述Spring源码中运用到的一些设计模式 ...

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    设计模式-类图

    结构型模式 :适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式 行为型模式 :策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者...

    C#23种设计模式样例代码和UML图

    C#23种设计模式样例代码和UML图等 创建型模式(抽象工厂模式、工厂方法模式、单例模式、建造者模式、原型模式); 行为型模式(策略模式、 迭代器模式、原型模式、职责链模式、 模板方法、 命令模式、 解释器模式、 ...

    设计模式--可复用面向对象软件的基础

    1.2 Smalltalk MVC中的设计模式 1.3 描述设计模式 1.4 设计模式的编目 1.5 组织编目 1.6 设计模式怎样解决设计问题 1.7 怎样选择设计模式 1.8 怎样使用设计模式 第二章 实例研究:设计一个文档编辑器 2.1 设计问题...

    研磨设计模式-part2

    如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...

    研磨设计模式-part4

    如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...

    研磨设计模式-part3

    如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...

    面向对象23种设计模式之代理模式

    面向对象23种设计模式之代理模式,简单明了。面向对象23种设计模式之代理模式,简单明了。

    java静态代理、动态代理、装饰设计模式

    NULL 博文链接:https://871656094.iteye.com/blog/2355335

    java 23种设计模式.zip

    2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略...

    Java设计模式-图解-附代码

    1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者模式 49 1.3.6 备忘录模式 52 1.3.7 观察者模式 54 1.3.8 状态模式 58 1.3.9 ...

    java版本二十三种设计模式.zip

    - 23种设计模式 - 工厂方法模式(Factory Method) - 抽象工厂模式(Abstract Factory) - 单例模式(Singleton) - 建造者模式(Builder) - 原型模式(Prototype) - 代理模式(Proxy) - 适配器模式(Adapter) - 装饰...

    java常用23中设计模式

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    01.装饰者设计模式和动态代理设计模式.wmv

    01.装饰者设计模式和动态代理设计模式.wmv

    java设计模式视频教程-百度网盘地址.txt

    单例模式、工厂模式、装饰者模式、ThreadLocal设计模式、代理模式等

Global site tag (gtag.js) - Google Analytics