装饰模式(二)

91 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

上一篇文章我们着重介绍了装饰模式的相关概念,这篇文章我们开始介绍装饰模式的使用。

组成的结构

对于一个设计模式,我们首先要了解其组成的各个角色。对于装饰模式,主要包含以下内容:

  1. 抽象构件(Component)角色:就是一个抽象接口,也可以是一个抽象类。这个接口的作用就是用来规范准备接收附加功能的对象,也就是“被装饰”的对象。
  2. 具体构件(ConcreteComponent)角色:定义一个将要接收附加功能的类,这个类实现了抽象构件的接口,是一个具体的“被装饰”的类。
  3. 抽象装饰角色(Decorator):持有一个构件(Component)对象的实例,作为装饰类的成员变量,并定义一个与抽象构件接口一致的接口,达到对调用者“透明”的目的。
  4. 具体装饰角色(ConcreteDecorator):负责给某个构件对象加上附加的功能,以达到“装饰”的目的。

其结构图如下:

image.png

实现步骤

  1. 定义抽象构件类:可以选择使用抽象类或者接口,在其中声明需要的实现的业务方法。
  2. 定义具体构件类:继承或实现抽象构件,实现业务方法的具体逻辑。
  3. 定义抽象装饰类:继承或实现抽象构件,增加一个抽象构件私有成员(抽象构建作为成员变量),可以通过该成员调用装饰之前具体构件的方法。
  4. 定义具体装饰类:继承抽象装饰类,并且增加一些装饰行为的逻辑,在装饰之前调用具体构件(成员变量)方法,接着调用装饰方法。

上述步骤看下来其实很清晰,如果用依据话来描述就是:负责装饰相关的类中有一个被装饰的成员变量,调用这个成员变量的方法,然后再调用装饰的逻辑,以达到“装饰”的目的。

总结

这篇文章我们主要通过文字描述的方式介绍了装饰模式的使用方法,读懂这些内容之后,我们才会对代码不会感到恐惧。下一篇文章我们来使用具体的代码实地介绍一下“装饰模式”的使用。