Java 23种设计模式之装饰者模式,使用场景及代码案例

装饰者模式

1.什么是装饰者模式?

概念:又名包装模式。动态给一个对象添加一些额外的职责。

若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。

2.装饰者模式的使用场景

2.1 以动态的方式给对象添加职责

2.2 处理那些可以撤销的职责

2.3 当采用生成子类的方法进行扩充时,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长

这里举一个例子,我们常见而且周董特别爱喝的奶茶,当然奶茶有多种口味,红豆,椰香,珍珠等等。。。

Java 23种设计模式之装饰者模式,使用场景及代码案例

如图中一样,奶茶是由一种主料和五种辅料组合搭配而成,这个它们一一搭配的关系,同样也可以两两或者三三搭配,依次下来就会有很多种搭配可能。从开发角度来说,就相当于继承,每个奶茶品种可以看成一个子类。我们都知道子类的作用,子类是对父类方法的一个增强,子类拥有比父类更为强大的方法。把这种场景放到开发中会出现一种现象,每新增加一种辅料最后都会新增一个子类,最后就形成了类爆炸????,继承虽然可以增强父类的功能但是子类会越来越多,代码会显的特别臃肿。

3.为什么要使用装饰者模式

由上图场景中总结,这里我们看到如果使用子类继承父类,那么我们要写很对子类,这么做无疑增加了程序的臃肿性,并不是很灵活,这时,装饰者模式就诞生了。

4.装饰者模式的结构

  1. 抽象组件(Component):给出一个抽象接口,以规范准备接收附件责任的对象
  2. 被修饰者(ConcreteComponent):Component的具体实现,也就是我们要装饰的具体对象(相当于上图中的奶茶)
  3. 装饰者组件(Decorator): 也可以说是装饰器,持有组件对象的实例引用,该类的职责就是为了装饰具体组件对象,定义的基类
  4. 具体装饰(ConcreteDecorator):负责给构建对象装饰附件功能

结构图结合案例

Java 23种设计模式之装饰者模式,使用场景及代码案例


 前面理论,接下来代码实践

开发工具sts 运行环境Tomcat7.0

Java 23种设计模式之装饰者模式,使用场景及代码案例

Drink.java

Java 23种设计模式之装饰者模式,使用场景及代码案例

Decorator.java 

Java 23种设计模式之装饰者模式,使用场景及代码案例

MilkTea.java

Java 23种设计模式之装饰者模式,使用场景及代码案例 

Gem.java

Java 23种设计模式之装饰者模式,使用场景及代码案例 

RedBean.java

Java 23种设计模式之装饰者模式,使用场景及代码案例 

TestMain.java

测试方法

Java 23种设计模式之装饰者模式,使用场景及代码案例 

结果

Java 23种设计模式之装饰者模式,使用场景及代码案例 


代码只是一个结合装饰者模式编写的一个案例,对应着看方便理解,具体实现根据自己的项目需求而定,不当之处请指出。