装饰者模式

© Young 2016-08-02 07:00
Welcome to My GitHub

定义

装饰者模式是指可以动态地为某个对象添加一些额外的职责,而不会影响从这个类中派生的其它对象。

类图

Java当中的IO是运用了装饰者模式的最典型的例子;

一般来说装饰者模式中有四大核心模块:

  • Component(抽象构件)

它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。

  • Concrete Component(具体构件)

它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方法,装饰器可以给它增加额外的职责(方法)。

  • Decorator(抽象装饰类)

它也是抽象构件类的子类,用于给具体构件增加职责,但是具体职责在其子类中实现。它维护一个指向抽象构件对象的引用,通过该引用可以调用装饰之前构件对象的方法,并通过其子类扩展该方法,以达到装饰的目的。

  • Concrete Decorator(具体装饰类)

它是抽象装饰类的子类,负责向构件添加新的职责。每一个具体装饰类都定义了一些新的行为,它可以调用在抽象装饰类中定义的方法,并可以增加新的方法用以扩充对象的行为。

实现

函数动态附加额外逻辑实现

优点

说到装饰者模式的优点,首先得说一说在传统面向对象语言中,给对象添加功能的常用方式继承的缺点;

其一,使用继承会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之改变;

其二,使用继承在完成一些功能复用时,有可能创建出大量的子类,比如:假设存在一种基础汽车类,现在要对汽车进行改造,有可能加入装甲、武器、雷达等,这些特性有可能单独加入,也有可能两两加入,甚至全部加入,此时如果还使用继承,那么就会出现有多达7种子类的情况。

那么装饰者模式的优点就显而易见了,装饰者模式能够在不改变对象自身的基础上,在程序运行期间给对象动态的添加职责,相对于继承更加轻便灵活。

缺点

修饰层级过多会导致程序开发维护效率降低,同时也会导致程序运行性能降低。

应用

  • Java IO库

发表评论

电子邮件地址不会被公开。 必填项已用*标注