装饰模式定义如下:
Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.
在保证提供相同的接口的前提下,动态的给一个对象添加额外的职责。装饰器比子类提供了更灵活的功能扩展。
装饰器通用类图如下:
15.png
四个角色如下:
1、Component抽象构件:是一个接口或者抽象类,定义我们最核心的对象,最原始的对象。 在装饰模式中,必然有一个充当最原始、最核心、最基本的接口或者抽象类来作为Component构件。
2、ConcreteComponent:具体构件,ConcreteComponent是最核心、最原始、最基本的接口或者抽象类的实现,装饰器模式要装饰的就是它。
3、Decorator 装饰角色:一般是一个抽象类,实现接口或者抽象方法,但它里面不一定有抽象方法,在它的属性里面必然有一个private的变量只想Component抽象构件
4、ConcreteDecorator:具体装饰角色,实现Decorator的方法
注意,在ConcreteDecorator中原始方法和装饰方法的执行顺序是固定的,根据业务可以具体来定,通过重载父类的方法来实现多种执行顺序。
装饰模式的优点:
1、装饰类和被装饰类可以独立发展,不会相互耦合。两者可以相互不用关心对方的存在。
2、装饰模式是继承关系的一种替代方案。看装饰类Decorator的构造方法,返回的对象永远是Component,也就是不管装饰多少层,都没有问题。是is-a的关系。
3、装饰模式可以动态的扩展一个实现类的功能。
装饰模式的缺点:
1、多层装饰模式是比较复杂的,类似于递归调用,一层一层的执行。
装饰模式的使用场景:
1、需要扩展一个类的功能或者增加附加功能,要准守开闭原则,关闭修改,开放扩展。
2、需要动态的给一个对象增加功能,这些功能可以在动态的插销。
3、需要为一批的类进行改装或者家装功能。
网友评论