您的位置 首页 java

JAVA设计模式之装饰者模式

设计模式是 JAVA 学习的重点,理解设计模式能大大提高我们的开发效率,提高代码的扩展性,写文章的目的也是为了加深对于设计模式的理解,同时与小伙伴们一起讨论,学习JAVA,若是有什么问题可以直接留言,感兴趣的小伙伴们也可以来波关注,后续会持续更新。

平时我们设计类时应该遵循开放-关闭原则,即类应该对扩展开放,对修改关闭。

认识装饰者模式

假如我们经营着一家奶茶店,奶茶种类有很多,有原味奶茶、 红豆奶茶 、绿豆奶茶、草莓奶茶等,奶茶还分小杯,中杯,大杯。当然奶茶店不只有奶茶,还有奶昔,冰沙等。若是每个种类,每种大小都设计一个类的话,类的数量将会非常多,也就是类爆炸。在这里我们就需要用到装饰者模式。

现在顾客需要一杯的绿豆珍珠奶茶,那么我们应该这么做:

  1. 拿一个奶茶对象(MilkTea)

  2. 以珍珠(Pearl)对象装饰它

  3. 以绿豆(Mung)对象装饰它

  4. 调用price()方法计算总价格

JAVA设计模式之装饰者模式

定义装饰者模式

装饰者模式动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案

装饰者模式角色:

类图 JAVA设计模式之装饰者模式

  1. Component 基础组件,被装饰对象的基类,每个组件都可以单独使用,或者被装饰者(Decorator)抱起来使用

  2. ConcreteComponent具体被装饰的对象,继承自Component

  3. Decorator装饰者,每个装饰者都有一个(包装一个)组件,也就是说装饰者有一个实例变量以保存某个Component的引用

  4. ConcreteDecorator具体装饰者,有一个实例变量,可以记录所装饰的事物

使用装饰者模式

类图 JAVA设计模式之装饰者模式

在这里我们的Beverage相对于 抽象 的Component,MilkTea(奶茶)、Sorbet(冰沙)、MilkShake(奶昔)相当于具体被装饰的对象ConcreteComponent,CondimentDecorator相当于Decorator,珍珠(Pearl)、绿豆(Mung)、草莓(Strawberry)相当于 ConcreteDecorator具体装饰者。

实现代码

抽象的饮料基类

JAVA设计模式之装饰者模式

抽象饮料基类

被装饰的对象奶茶类,奶昔类,冰沙类

JAVA设计模式之装饰者模式

奶茶类

JAVA设计模式之装饰者模式

奶昔类

JAVA设计模式之装饰者模式

冰沙类

抽象装饰者

JAVA设计模式之装饰者模式

抽象装饰者类

具体装饰者绿豆类,珍珠类,草莓类

JAVA设计模式之装饰者模式

绿豆类

JAVA设计模式之装饰者模式

珍珠类

JAVA设计模式之装饰者模式

草莓类

顾客下订单

JAVA设计模式之装饰者模式

模拟顾客下订单

运行结果

源码地址

码云:

我这里用到的开发工具是Intellij IDEA,使用 maven 管理项目,由于目前一天只能发表一篇文章,明天会写下关于Intellij IDEA的安装以及使用

文章来源:智云一二三科技

文章标题:JAVA设计模式之装饰者模式

文章地址:https://www.zhihuclub.com/201210.shtml

关于作者: 智云科技

热门文章

网站地图