设计模式之装饰模式
2017-04-20 17:40
169 查看
设计模式之装饰模式
什么是装饰模式
动态的为一个对象添加新的功能装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展新的功能,使用对象的关联关系,代替继承关系,更加灵活,同时避免类型体系的快速膨胀
组成:
Component(抽象构建类)
concreteComponent(具体的抽象构建类)
deocorator(装饰器)
concretedeocorator(具体装饰器)
装饰模式怎么用
我们一汽车增加新的移动方式为例,写装饰模式。如果我们没有用装饰模式将会产生很多类。比如我们要增加一个可以飞的可以水里游的,我们要增加一个这样的类,当我们使用装饰着模式时我们通过对象的组合来实现。减少类的增加。
package decorator; /** * Component(抽象构建类) */ public interface ICar { void move(); } /** * concreteComponent(具体的抽象构建类) */ class Car implements ICar{ @Override public void move() { System.out.println("陆地上跑"); } } /** * deocorator(装饰器) */ class Supercar implements ICar{ protected Car car; public Supercar(Car car) { super(); this.car = car; } @Override public void move() { car.move(); } } /** * concretedeocorator(具体装饰器) */ class FlyCar extends Supercar{ public FlyCar(Car car) { super(car); } @Override public void move() { super.move(); System.out.println("天上飞"); } } class WaterCar extends Supercar{ public WaterCar(Car car) { super(car); } @Override public void move() { super.move(); System.out.println("水里游"); } }
package decorator; public class Client { public static void main(String[] args) { Car car = new Car(); car.move(); System.out.println("增加飞行功能------------"); FlyCar flyCar = new FlyCar(car); flyCar.move(); } }
为什么要用装饰类
装饰模式也叫包装器模式,装饰模式降低系统的耦合度,可以动态的增加或者删除对象的职责,并使得具体装饰的对象和具体的装饰器可以独立变化,以便增加新的具体构件类和具体装饰类
优点:
扩展对象功能,比继承灵活,不会导致类的个数急剧增加,
可以对一个对象进行多次装饰,创造出不同行为的组合,得到功能更加强大的对象
具体构建类和具体装饰类可以独立变化,用户可以根据自己的需要增加新的具体构建类和具体装饰类
缺点:产生很多小对象,大量的小对象占内存,一定程度上影响性能,
装饰模式易于出错,排查麻烦。
应用场景:
io中的输入输出流的设计
Swing包中图形界面构件功能,、
Struts2中的requsest ,session,respone,对象的处理
装饰者模式和桥接模式的区别:
桥接模式是对象自身现有机制沿着多个维度变化
装饰者模式是为了增加对象的新功能
相关文章推荐
- 设计模式---装饰模式
- NET设计模式之一:装饰模式(Decorator Pattern)
- 设计模式中结构型模式(四)装饰模式(Decorator)
- 设计模式c#描述——装饰(Decorator)模式
- 第四个设计模式:装饰模式
- 设计模式c#语言描述——装饰(Decorator)模式
- 结构型设计模式---Decorator模式(装饰模式)
- .NET设计模式研究之装饰模式
- 解读设计模式----装饰模式(Decorator Pattern)
- 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)
- 用实例解说Dot Net设计模式——装饰模式
- 第四个设计模式:装饰模式
- AspectJ实现设计模式(七)—装饰模式
- 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)
- 设计模式之---装饰(decorator)
- 设计模式c#语言描述——装饰(Decorator)模式
- 设计模式之装饰模式篇(Decorator)
- 设计模式之--装饰器模式的硬编码的静态装饰和链化
- 设计模式学习笔记-装饰模式
- 设计模式(11)-装饰模式(Decorator)