`
云上太阳
  • 浏览: 131327 次
  • 性别: 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方式。这个以后再写

 

    

分享到:
评论

相关推荐

    C++设计模式--基于Qt4开源跨平台开发框架

    结构型模式如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy),则关注如何组合和连接类与对象,以达到新的功能。行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式...

    设计模式-Java语言中的应用

    通过阅读《设计模式-Java语言中的应用》,读者不仅可以掌握设计模式的基本概念和原理,还能学习到如何在实际项目中选择合适的设计模式,以及如何优雅地在Java代码中实现这些模式。这将有助于提升开发者的编程技巧,...

    C++设计模式-基于QT4开源跨平台开发框架 源码

    在本资源中,"C++设计模式-基于QT4开源跨平台开发框架 源码",我们将重点探讨如何在C++编程语言中结合QT4框架来应用这些模式。 QT4是一个广泛使用的开源跨平台开发框架,它允许开发者用C++创建桌面、移动和嵌入式...

    java设计模式---诙谐易懂版

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template Method...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作《设计模式:可复用面向对象软件的基础》中提出的。这本书详细阐述了23种设计...

    设计模式课件大全

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

    软件设计模式--填空题+简答题(复习7).rar

    《软件设计模式--填空题+简答题(复习7).rar》这个压缩包文件是一个针对《软件设计模式与体系结构》课程的复习资料,重点涵盖了软件设计中的关键概念和实践。设计模式是软件工程中的一种最佳实践,它代表了在特定上...

    Java设计模式----通俗易懂版

    这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...

    JAVA设计模式-chm版

    包括适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、组合模式(Composite)、享元模式(Flyweight)和代理模式(Proxy)。这些模式可以帮助我们更好地组织代码,实现...

    设计模式---装饰者模式

    装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码或创建子类。这种模式的核心思想是通过将对象封装在一个装饰器对象内,来扩展对象的功能,同时保持原有接口的不变...

    JAVA设计模式--程序设计--反射--注解--泛型

    设计模式包括创建型模式(如单例、工厂方法、抽象工厂等)、结构型模式(如适配器、装饰器、代理等)和行为型模式(如策略、观察者、职责链等)。这些模式提供了良好的可复用性和可扩展性,帮助开发者遵循“开闭原则...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_《0528》.rar

    结构型模式关注如何将对象和类组合成更大的结构,如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy)等,它们提供了更好的抽象和接口集成。行为型模式则关注对象之间的交互和职责分配,如策略...

    设计模式-华工课件 设计模式

    2. 结构型模式:这些模式处理对象组合和结构,如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式。适配器模式让不兼容的接口可以协同工作,装饰器模式在运行时动态给对象添加功能,而...

    设计模式-C++

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

    设计模式-王翔 全本

    《设计模式-王翔 全本》是一本深入探讨软件设计模式的重要著作,作者王翔在书中详尽地阐述了设计模式的理论基础与实践应用。设计模式是软件工程中的重要概念,它代表了在特定情境下,经过时间检验、可复用的解决方案...

    26种设计模式-----pdf

    结构型模式则关注如何将类或对象组合成更大的结构,例如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)和组合模式(Composite)。这些模式可以帮助我们处理类与类之间的...

    C#设计模式-C#设计模式

    在软件开发领域,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。C#设计模式是将这些通用解决方案应用于C#编程语言的具体实践。本文将深入探讨C#中的几种重要设计模式,并阐述它们的核心概念、...

    JAVA设计模式-原则和23种设计模式归纳总结

    JAVA设计模式-原则和23种设计模式归纳总结 本资源主要介绍了JAVA设计模式的原则和23种设计模式的总结。设计模式是软件设计中的一种解决方案,能够使软件系统更加灵活、可维护和可扩展。本资源首先介绍了设计模式的...

    23种 设计模式---面向对象的基本原则

    设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结,为软件开发提供了可复用的解决方案。在面向对象编程中,设计模式基于一些基本原则,这些原则构成了良好设计的基础。本篇将深入探讨23种设计...

    设计模式-Java语言中的应用(pdf)

    此外,设计模式的掌握有助于理解和使用各种框架,因为大多数成熟框架都是设计模式的实践成果。例如,EJB(Enterprise JavaBeans)中的会话bean和实体bean体现了工厂模式和单例模式,而Hibernate作为流行的ORM...

Global site tag (gtag.js) - Google Analytics