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

装饰者模式

1.什么是装饰者模式?

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

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

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

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

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

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

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

Java 23种设计模式之装饰者模式,使用场景及代码案例_第1张图片

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

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

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

4.装饰者模式的结构

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

结构图结合案例

Java 23种设计模式之装饰者模式,使用场景及代码案例_第2张图片


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

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

Java 23种设计模式之装饰者模式,使用场景及代码案例_第3张图片

Drink.java

Java 23种设计模式之装饰者模式,使用场景及代码案例_第4张图片

Decorator.java 

Java 23种设计模式之装饰者模式,使用场景及代码案例_第5张图片

MilkTea.java

Java 23种设计模式之装饰者模式,使用场景及代码案例_第6张图片 

Gem.java

Java 23种设计模式之装饰者模式,使用场景及代码案例_第7张图片 

RedBean.java

Java 23种设计模式之装饰者模式,使用场景及代码案例_第8张图片 

TestMain.java

测试方法

Java 23种设计模式之装饰者模式,使用场景及代码案例_第9张图片 

结果

Java 23种设计模式之装饰者模式,使用场景及代码案例_第10张图片 


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

你可能感兴趣的:(java)