适配器模式和装饰者模式的区别
2015-01-15 19:18
169 查看
适配器模式将一个类的接口,转化成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。
装饰者模式:动态的将责任附加到对象上(因为利用组合而不是继承来实现,而组合是可以在运行时进行随机组合的)。若要扩展功能,装饰者提供了比继承更富有弹性的替代方案(同样地,通过组合可以很好的避免类暴涨,也规避了继承中的子类必须无条件继承父类所有属性的弊端)。
特点:
1. 装饰者和被装饰者拥有相同的超类型(可能是抽象类也可能是接口)
2. 可以用多个装饰类来包装一个对象,装饰类可以包装装饰类或被装饰对象
3. 因为装饰者和被装饰者拥有相同的抽象类型,因此在任何需要原始对象(被包装)的场合,都可以用装饰过的对象来替代它。
4. 装饰者可以在被装饰者的行为之前或之后,加上自己的附加行为,以达到特殊目的
5. 因为对象可以在任何的时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象
java.io库是最好的例子
OutputStream
ByteArrayOutputStream
FileOutputStream
PipedOutputStream
FilterOutputStream
BufferedOutputStream
DataOutputStream
小结:装饰者模式——动态地将责任附加到对象上。想要扩展功能,装饰者提供了有别于继承的另外一种选择。是一个很好的符合了开闭原则的设计模式。
总结:适配器模式主要是为了接口的转换,而装饰者模式关注的是通过组合来动态的为被装饰者注入新的功能或行为(即所谓的责任)。
适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增强新的行为和责任;而外观将一群对象包装起来以简化其接口
装饰者模式:动态的将责任附加到对象上(因为利用组合而不是继承来实现,而组合是可以在运行时进行随机组合的)。若要扩展功能,装饰者提供了比继承更富有弹性的替代方案(同样地,通过组合可以很好的避免类暴涨,也规避了继承中的子类必须无条件继承父类所有属性的弊端)。
特点:
1. 装饰者和被装饰者拥有相同的超类型(可能是抽象类也可能是接口)
2. 可以用多个装饰类来包装一个对象,装饰类可以包装装饰类或被装饰对象
3. 因为装饰者和被装饰者拥有相同的抽象类型,因此在任何需要原始对象(被包装)的场合,都可以用装饰过的对象来替代它。
4. 装饰者可以在被装饰者的行为之前或之后,加上自己的附加行为,以达到特殊目的
5. 因为对象可以在任何的时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象
java.io库是最好的例子
OutputStream
ByteArrayOutputStream
FileOutputStream
PipedOutputStream
FilterOutputStream
BufferedOutputStream
DataOutputStream
小结:装饰者模式——动态地将责任附加到对象上。想要扩展功能,装饰者提供了有别于继承的另外一种选择。是一个很好的符合了开闭原则的设计模式。
总结:适配器模式主要是为了接口的转换,而装饰者模式关注的是通过组合来动态的为被装饰者注入新的功能或行为(即所谓的责任)。
适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增强新的行为和责任;而外观将一群对象包装起来以简化其接口
相关文章推荐
- 装饰模式与适配器模式的的区别
- 外观模式和适配器模式的区别
- 辨析代理模式、外观模式、适配器模式三者区别
- 代理模式和装饰者模式的区别
- Java模式之装饰者模式&代理模式 装饰模式与代理模式区别
- 白话设计模式 --结构型模式--装饰者(Decorator)模式,适配器模式和外观模式
- 设计模式:适配器模式和代理模式的区别
- 装饰模式与适配器模式的一句话区别
- Java 代理模式和装饰者模式的区别
- 继承,装饰者模式和动态代理之间的区别
- 代理模式与装饰者模式的区别
- Java 代理模式和装饰者模式的区别
- 设计模式之间区别 (2) 装饰者模式和继承
- 适配器模式、装饰器模式、代理模式的区别
- 桥接模式、适配器模式以及外观模式三者的区别
- 装饰者模式与外观者模式的区别
- 桥接模式与装饰者模式的区别
- “装饰者模式”和“对象适配器模式”异同
- 装饰者模式,代理模式与适配器模式的比较
- 装饰者模式与外观者模式的区别