设计模式-模板方法 (2)

定义咖啡的算法细节

package com.zero.design.actions.template; /** * 咖啡具体实现:只需要自行处理冲泡和添加调料部分 */ public class Coffe extends AbstractBeverage { /** * 这样通过钩子就可以选择是都要加佐料了 */ public boolean addCondiments = true; /** * 添加糖、牛奶 */ @Override protected void addCondiments() { System.out.println("添加糖跟牛奶"); } /** * 咖啡冲泡方法 */ @Override protected void brew() { System.out.println("放入咖啡豆,使用秘制方法冲泡"); } /** * 重写钩子 * @return */ @Override boolean customerWantsCondiments() { return addCondiments; } public boolean isAddCondiments() { return addCondiments; } public void setAddCondiments(boolean addCondiments) { this.addCondiments = addCondiments; } }

接着就是客户点单,我们通过模板方法模式制作咖啡或者功夫茶。达到代码复用。

package com.zero.design.actions.template; /** * Created by unique on 2017/6/7. */ public class Test { public static void main(String[] args) { Tea tea = new Tea(); tea.setAddCondiments(false); tea.prepareRecipe(); System.out.println("-------------------"); Coffe coffe = new Coffe(); coffe.prepareRecipe(); } }

输出如下

把水煮沸... 秘制泡茶方式放入茶叶 倒入杯子中... ------------------- 把水煮沸... 放入咖啡豆,使用秘制方法冲泡 倒入杯子中... 添加糖跟牛奶 模板方法模式的优缺点 优点

1)良好的封装性。把公有的不变的方法封装在父类,而子类负责实现具体逻辑。

2)良好的扩展性:增加功能由子类实现基本方法扩展,符合单一职责原则和开闭原则。

3)复用代码。

缺点

1)由于是通过继承实现代码复用来改变算法,灵活度会降低。

2)子类的执行影响父类的结果,增加代码阅读难度。

点赞与收藏是最大的鼓励。欢迎关注公众号 JavaStorm

JavaStorm

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyfjz.html