`
darrenzhu
  • 浏览: 804590 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

装饰者模式,代理模式与适配器模式的比较

阅读更多
http://baike.baidu.com/view/2787758.htm
装饰者与适配者模式的区别
1.关于新职责:适配器也可以在转换时增加新的职责,但主要目的不在此。装饰者模式主要是给被装饰者增加新职责的。
2.关于原接口:适配器模式是用新接口来调用原接口,原接口对新系统是不可见或者说不可用的。装饰者模式原封不动的使用原接口,系统对装饰的对象也通过原接口来完成使用。(增加新接口的装饰者模式可以认为是其变种--“半透明”装饰者)
3.关于其包裹的对象:适配器是知道被适配者的详细情况的(就是那个类或那个接口)。装饰者只知道其接口是什么,至于其具体类型(是基类还是其他派生类)只有在运行期间才知道


http://www.cnblogs.com/jaredlam/archive/2011/11/08/2241089.html
对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一个接口。
对代理模式来说,代理类(proxy class)和真实处理的类(real class)都实现同一个接口。此外,不论我们使用哪一个模式,都可以很容易地在真实对象的方法前面或者后面加上自定义的方法。
然而,实际上,在装饰器模式和代理模式之间还是有很多差别的。
装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。
因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。


http://jqsl2012.iteye.com/blog/1391448
代理模式是一种很常用的设计模式,其目的是对其他对象提供一种代理以控制对这个对象的访问。
代理模式又分为静态代理和动态代理,静态代理是在程序运行之前就已经存在了代理类,动态代理是程序运行中在内存中生成代理类。
代理模式存在的意义:代理模式是为了解决滥用继承的问题而生的,当想对某个类的功能进行扩充的时候可以使用继承或聚合,很明显用继承的话会造成类泛滥,还有一点就是继承是类具有很强的层级关系的情况下用才好,而紧紧对某个类进行功能的扩充就拿起继承的大刀明显的不合适,那么用聚合呢?
                    聚合是一种松耦合的,用聚合创建的代理类就是静态代理,还有更好的代理是动态代理。
动态代理自己实现其实也很简单,不过JDK提供了方便的解决方案。
java.lang.reflect.InvocationHandler
java.lang.reflect.Proxy
这两个东东就是为动态代理而生的

其实装饰模式和代理模式极为相似,更近一步,装饰模式和静态代理极为相似
相同点:都是为被代理(被装饰)的类扩充新的功能。
不同点:代理模式具有控制被代理类的访问等性质,而装饰模式紧紧是单纯的扩充被装饰的类。所以区别仅仅在是否对被代理/被装饰的类进行了控制而已。
分享到:
评论

相关推荐

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

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

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

    装饰器模式与其他设计模式的比较 在 Spring 设计模式中,装饰器模式经常与其他设计模式比较。例如,代理模式、适配器模式和模板方法模式。 * 代理模式:代理模式和装饰器模式类似,但是代理模式更关心的是控制原有...

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等

    Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子...

    设计模式适配器模式PPT学习教案.pptx

    除了适配器模式,还有其他结构型模式,如桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。这些模式各自关注点不同,但都致力于提高代码的结构和可维护性。 桥接模式将抽象部分和实现部分解耦,使它们...

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

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

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

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

    设计模式-C++

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

    day03 代理+适配器+桥接+外观+装饰

    代理模式、适配器模式、桥接模式、外观模式、装饰者模式 结构型模式是描述如何将类或对象按某种布局组成更大的结构的模式。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或...

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

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

    23种设计模式项目实例

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

    23种设计模式详解PDF

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

    java常用23中设计模式

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

    《Java设计模式》电子课件01至21章(程细柱PDF)

    内容包括统一建模语言基础知识、面向对象设计原则、设计模式概述、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、...

    2 适配器模式-课程内容.rar

    8. **适配器模式与其他设计模式的关系**:比较适配器模式与装饰者模式、代理模式等其他设计模式的异同。 9. **案例分析**:通过实际案例演示如何在项目中使用适配器模式,帮助理解其实际应用。 10. **设计原则**:...

    23种设计模式java源码

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

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

    在代理模式中,代理类作为真实对象的代表,它可以在客户端与真实对象交互时添加额外的行为,如监控、安全管理或者缓存等。 代理模式的核心思想是通过代理类来控制对原始对象的访问,这种控制可以体现在多个方面。...

    Java23种设计模式可直接运行Demo

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

    java 23种设计模式.zip

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

    java设计模式示例

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

    精品源码 C# 27种设计模式源代码

    1 装饰模式 2 单例模式 2 门面模式 2 模板方法模式 3 策略模式 3 工厂方法模式 3 组合模式 4 抽象工厂模式 4 代理模式 4 命令模式 5 迭代器模式 5 适配器模式 5 原型模式 6 简单工厂模式 6 解释器模式 6 享元模式 7 ...

Global site tag (gtag.js) - Google Analytics