概述
我们先来看一个快餐店的例子。
快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。
使用继承存在的问题:
- 拓展性不好:
如果要再加一种配料,我们还需要再定义子类,产生过多的子类。
装饰者模式中的角色:
- 抽象构件角色:定义一个抽象接口来规范准备接收附加责任的对象。
- 具体构件角色:实现抽象构件,通过装饰者角色为其添加一些指责。
- 抽象装饰角色:继承或实现抽象构件,并包含具体构件的实例,可以通过其子类拓展具体构件的功能。
- 具体装饰角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
案例
以上边的快餐为案例:装饰者实现代码如下:
publi