设计模式是 JAVA 学习的重点,理解设计模式能大大提高我们的开发效率,提高代码的扩展性,写文章的目的也是为了加深对于设计模式的理解,同时与小伙伴们一起讨论,学习JAVA,若是有什么问题可以直接留言,感兴趣的小伙伴们也可以来波关注,后续会持续更新。
平时我们设计类时应该遵循开放-关闭原则,即类应该对扩展开放,对修改关闭。
认识装饰者模式
假如我们经营着一家奶茶店,奶茶种类有很多,有原味奶茶、 红豆奶茶 、绿豆奶茶、草莓奶茶等,奶茶还分小杯,中杯,大杯。当然奶茶店不只有奶茶,还有奶昔,冰沙等。若是每个种类,每种大小都设计一个类的话,类的数量将会非常多,也就是类爆炸。在这里我们就需要用到装饰者模式。
现在顾客需要一杯的绿豆珍珠奶茶,那么我们应该这么做:
拿一个奶茶对象(MilkTea)
以珍珠(Pearl)对象装饰它
以绿豆(Mung)对象装饰它
调用price()方法计算总价格
定义装饰者模式
装饰者模式动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案
装饰者模式角色:
类图
Component 基础组件,被装饰对象的基类,每个组件都可以单独使用,或者被装饰者(Decorator)抱起来使用
ConcreteComponent具体被装饰的对象,继承自Component
Decorator装饰者,每个装饰者都有一个(包装一个)组件,也就是说装饰者有一个实例变量以保存某个Component的引用
ConcreteDecorator具体装饰者,有一个实例变量,可以记录所装饰的事物
使用装饰者模式
类图
在这里我们的Beverage相对于 抽象 的Component,MilkTea(奶茶)、Sorbet(冰沙)、MilkShake(奶昔)相当于具体被装饰的对象ConcreteComponent,CondimentDecorator相当于Decorator,珍珠(Pearl)、绿豆(Mung)、草莓(Strawberry)相当于 ConcreteDecorator具体装饰者。
实现代码
抽象的饮料基类
被装饰的对象奶茶类,奶昔类,冰沙类
抽象装饰者
具体装饰者绿豆类,珍珠类,草莓类
顾客下订单
源码地址
码云:
我这里用到的开发工具是Intellij IDEA,使用 maven 管理项目,由于目前一天只能发表一篇文章,明天会写下关于Intellij IDEA的安装以及使用