`

装饰模式和代理模式的区别

 
阅读更多

从功能效果上看

装饰模式:在不改变接口的前提下,动态扩展对象的功能

代理模式:在不改变接口的前提下,控制对象的访问

装饰模式强调功能扩展,比如A对象的B方法,运用装饰模式后,在调用B方法前后,实现新的功能,此时B方法效果与原来不同

代理模式强调控制访问,如上例,运用代理模式后,在调用B方法前后,控制怎么访问B方法的原始数据,而对于B实现的功能效果不做修改

因此,如果运用设计模式后,方法的功能效果(主要是输出效果)不变,一般可视为代理。

从类结构上看

通过装饰模式结构图中可以看出

Component类在Decorator模式中充当抽象接口的角色,不应该去实现具体的行为。而且Decorator类对于Component类应该透明,换言之Component类无需知道Decorator类,Decorator类是从外部来扩展Component类的功能。

Decorator类在接口上表现为is-a Component的继承关系,即Decorator类继承了Component类所具有的接口。但在实现上又表现为has-a Component的组合关系

Decorator模式在实际中的运用可以很灵活。如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类。

同样,通过代理模式结构图中可以得出

代理类和被代理对象是has-a关系,一般没有is-a关系,除非代理类直接继承被代理类,重写被代理类的方法,即上图中没有抽象Subject类时的情况。

分享到:
评论

相关推荐

    适配器模式,装饰模式和代理模式1

    适配器模式、装饰模式和代理模式 本文将详细介绍适配器模式、装饰模式和代理模式的概念、特点和应用场景,并通过实际的例子来阐述这三种模式的差异和相同点。 一、适配器模式 适配器模式是一种结构型设计模式,它...

    java装饰模式及动态代理模式示例源码

    装饰模式和动态代理模式是Java编程中两种非常重要的设计模式,它们都在代码的扩展性和灵活性方面发挥着关键作用。下面将分别对这两种模式进行详细解释,并结合手写的数据库连接池和动态代理模式的使用进行深入探讨。...

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

    在Java编程中,代理模式是一种常见的设计模式,它允许我们为一个对象提供一个代理以控制对这个对象的访问。代理模式通常用于增加额外的功能或在访问原对象时进行额外的操作,比如日志记录、安全控制、性能统计等。...

    54-Spring设计模式之装饰器模式1

    * 代理模式:代理模式和装饰器模式类似,但是代理模式更关心的是控制原有对象的访问,而不是添加新的行为或功能。 * 适配器模式:适配器模式是用于解决不兼容的问题,而不是添加新的行为或功能。 * 模板方法模式:...

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

    代理模式是面向对象设计模式中的一个关键概念,它在软件工程中扮演着重要角色,用于在客户端和目标对象之间创建一种代理关系,以提供额外的功能或控制。在代理模式中,代理类作为真实对象的代表,它可以在客户端与...

    Ruby使用设计模式中的代理模式与装饰模式的代码实例共3页

    本资料主要探讨的是代理模式(Proxy Pattern)和装饰模式(Decorator Pattern)在Ruby中的实现,通过具体的代码实例,帮助开发者理解和运用这两种模式。 **代理模式**是一种结构型设计模式,它创建了一个拥有与目标...

    [结构型模式] 装饰者模式的理解

    装饰者模式与代理模式有一定的相似性,但两者有明显的区别。装饰者关注于增强对象的行为,而代理则更侧重于控制访问,如权限控制、远程代理等。 为了更好地理解装饰者模式,可以参考提供的PDF文件。"装饰者模式-...

    23种设计模式详细介绍与区别

    在本文中,我们将深入探讨标题提及的23种设计模式,并着重讨论桥接模式与适配器模式、装饰模式与代理模式、状态模式与策略模式,以及工厂模式之间的差异。 1. **桥接模式与适配器模式**: - **桥接模式**:将抽象...

    Python实现适配器模式、装饰器模式、代理模式.md

    Python实现适配器模式、装饰器模式、代理模式

    代理模式Demo代理模式代理模式Demo

    代理模式是一种设计模式,它在软件工程中扮演着重要的角色,允许我们为其他对象提供一个替代品或代理,以控制对这...通过理解和熟练运用代理模式,开发者能够更好地应对各种复杂的软件需求,提高软件设计的质量和效率。

    51丨适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别?1

    代理模式、桥接模式、装饰器模式和适配器模式虽然在代码结构上有些相似,但它们的核心目的和应用场景不同: - **代理模式**:为对象提供一个代理以控制对该对象的访问,如远程代理、虚拟代理、缓存代理等。 - **...

    设计模式之代理模式视频教学

    4. **代理模式与其他模式的结合**:代理模式常常和其他设计模式一起使用,例如装饰器模式,它们之间的区别和联系会有所讲解。 5. **代理模式的优缺点**:讨论代理模式的优点,如增加灵活性、解耦等,同时也会提到其...

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

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

    装饰者模式.pptx

    虽然代理模式和装饰者模式在实现上可能有相似之处,但其核心意图和使用场景完全不同。 ### 装饰者模式的应用场景 装饰者模式广泛应用于需要动态添加功能的场景中,如Java I/O系统中的流装饰,可以为基本的输入输出...

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

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

    23种设计模式详解PDF

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

    设计模式之代理模式

    代理模式是设计模式中的一种结构型模式,它在软件工程中扮演着重要的角色,尤其是在对象交互和控制访问方面。代理模式的核心思想是为一个对象提供一个代理,这个代理对象可以控制对原对象的访问,或者在原对象的基础...

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

    装饰者模式与代理模式有些相似,但它们的主要区别在于目的:装饰者是为了扩展功能,而代理则是为了控制对原对象的访问。 在编程实践中,合理地使用装饰者模式,可以使代码结构更加清晰,更容易进行功能的扩展和维护...

Global site tag (gtag.js) - Google Analytics