设计模式-模板方法模式
2018-09-10 01:03:42来源:博客园 阅读 ()
1、模板方法模式
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。
常见的生活中模板举例:银行规定了办理业务的模板/步骤,1)进门取号;2)填写单据;3)等待叫号;4)窗口办理。第二步由具体的客户填写不同的单子,第四步银行业务员根据不同单子,做不同的业务操作
2、模板方法模式的实现要素
定义一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法交由子类实现剩余逻辑,用钩子方法给你子类更大的灵活性,最后将方法汇总构成一个不可变的模板方法。模板方法模式适用于算法或操作遵循相似的逻辑的场景
3、模板方法模式的应用--制作饮料
定义抽象基类:由算法框架、基本方法、抽象方法、钩子函数组成
package com.cn.shejimoshi.mobanfangfamoshi; /** * 抽象基类,为所有子类提供一个算法框架 * */ public abstract class RefreshBeverage { /** * 制备饮料的模板方法 * 封装了所有子类共同遵循的算法框架 */ public final void prepareBeverageTemplate(){ //步骤1 将水煮沸 boilWater(); //步骤2 泡制饮料 brew(); //步骤3 将饮料倒入杯中 pourIncup(); if (isCustomerWantCondiments()){ //步骤4 加入调味料 addCondiments(); } } /** * 钩子函数,提供一个默认或空的实现 * 具体的子类可以自行决定是否挂钩(此处特定场景表示钩子函数的返回的true或false)以及如何挂钩(钩子函数的实现逻辑) * 询问用户是否加入调料 * @return */ protected boolean isCustomerWantCondiments() { return true;//默认加入调味料 } /** * 基本方法(私有,算法框架中不会变化的步骤)--将水煮沸 */ private void boilWater() { System.out.println("将水煮沸"); } protected abstract void brew(); /** * 基本方法(私有,算法框架中不会变化的步骤)--将饮料倒入杯中 */ private void pourIncup(){ System.out.println("将饮料倒入杯中"); } protected abstract void addCondiments(); }
实现类1-Coffee
package com.cn.shejimoshi.mobanfangfamoshi; /** * 具体子类,提供了咖啡制作的具体实现 */ public class Coffee extends RefreshBeverage { @Override protected void brew() { System.out.println("用沸水冲泡咖啡"); } @Override protected void addCondiments() { System.out.println("加入糖和牛奶"); } }
实现类2-Tea
package com.cn.shejimoshi.mobanfangfamoshi; public class Tea extends RefreshBeverage { @Override protected void brew() { System.out.println("用80度的热水浸泡茶叶5分钟"); } @Override protected void addCondiments() { System.out.println("加入柠檬"); } @Override protected boolean isCustomerWantCondiments() { return false;//不加调料 } }
测试方法
package com.cn.shejimoshi.mobanfangfamoshi; import org.junit.Test; public class RefreshBeverageTest { @Test public void coffeeTest(){ RefreshBeverage refreshBeverage=new Coffee(); refreshBeverage.prepareBeverageTemplate(); } @Test public void teaTest(){ RefreshBeverage refreshBeverage=new Tea(); refreshBeverage.prepareBeverageTemplate(); } }
写在最后:
设计模式是一种经验总结、编程思想,拒绝代码的迷惑。
一种设计模式的代码变体可以有很多,但万变不离其宗。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 类的继承,方法重新中修饰符如何定义 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash