°

装饰器模式

14.1 装饰器模式 Decorator

职责:动态的为一个对象增加新的功能

装饰模式是一种用于代替继承技术,无须通过继承增加子类就能扩散对象的新功能,使用对象的关联关系代替继承关系,增加灵活,同时避免类型体系的快速膨胀。

例如:创建一个父类汽车,然后子类有会潜水的汽车,还有人工智能汽车,还有飞行的汽车。然后如果添加功能比如既可以飞行又可以潜水的汽车,这时候就必须增加一个子类继承汽车的父类。所以,如果增加的功能越来越多,意味着子类也会越来越多,则需要排列组合得到大量的子类。这个时候就需要装饰器模式,减少代码的复杂程度。


实现细节:

(1)抽象构件角色:ICar

(2)具体的构件角色:Car

(3)装饰器角色:SuperCar

(4)具体的装饰角色:FlyCar,WaterCar,AICar

supercar对car进行装饰,有flycar,watercar和aicar进行装饰。

可以为汽车装饰飞行,可以为汽车装饰潜水,可以为汽车装饰人工智能

优点:

1)扩展对象功能,比继承灵活,不会导致类个数急剧增加。

2)可以对一个对象进行多次装饰,创建出不同行为的组合,得到功能更加大的对象。

3)具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的具体构建子类和自己装饰子类

缺点:

1)产生很多小对象,小对象占用内存,一定程度上影响性能。

2)装饰模式易于出错,调试排查比较麻烦。

IO流实现细节

1)抽象构件角色:InputStream、OutputStream、Reader、Writer

2)具体构建角色:FileInputStream、FileOutputStream

3)装饰器角色:FileInputStream、FileOutputStream持有一个抽象构件的角色

4)具体装饰角色:BufferedInputStream、BufferedOutputStream

打赏
  喜欢