手抓饼

结构型模式————装饰器模式(3.1)

為{幸葍}努か 提交于 2019-11-27 05:45:45
什么是装饰器模式? 【先吃三颗栗子:】 1.PC= 主机 +显示器+键盘+鼠标+鼠标垫 主机是核心,而其他的组成部分都是装饰。 2.手抓饼= 饼 +鸡蛋+培根+黄瓜 饼是核心,鸡蛋,培根是可选的,可以理解为装饰。 3.咖啡= 咖啡 +牛奶+冰+方糖 咖啡是核心,牛奶等可选。 比喻虽然形象生动,但是与实际或多或少会产生偏差。 抽象的解释:装饰器模式的目的—— 核心部分和装饰部分可以自由组合。 装饰器模式的功能 对于软件开发来说,聚焦于软件的灵活性和可扩展性。 装饰器模式要求: 装饰可选 装饰可扩展 核心部分可扩展 手抓饼中的装饰器模式 实现饼加各种配料的价格计算。 思路: 1.定义抽象类手抓饼,其中包含获取种类的抽象方法和获取价格的抽象方法。 2.然后定义两个分别为大份手抓饼和中份手抓饼来继承这个抽象类,重写两个方法定义种类和价格。 3.定义具体的配料类继承手抓饼抽象类,先定义构造器传入已经创建的手抓饼种类,然后重写种类和价格方法。 在网上看的一些博客,是创建出一个抽象的配料类来继承抽象产品类,然后用具体的配料类来实现抽象配料类,实现装饰。 可是如果直接将抽象产品类的方法全部定义抽象方法,配料类直接继承重写,实现装饰,功能上也是可以实现的,如下所示,Bacon类直接继承HandPancake,然后重写getName和getCost方法,实现装饰。似乎也没有问题: