设计模式2-模板模式
来源:互联网 发布:linux导出mysql数据表 编辑:程序博客网 时间:2024/06/07 21:58
这个可以类比填表单,事务的流程是清晰的,部分过程是抽象的,需要具体实现类自己实现。
方法:
用抽象基类定义框架
1.创建抽象类
—public abstract class RefreshBeverage
2.创建模版方法 一定要用final因为要禁止子类对方法框架的覆写
—public final void prepareBeverageTemplate()
—boilWater();
—brew();
—pourInCup();
—addCondiments();
3.实现并私有化基本方法
—private
4.添加抽象的基本方法
—protected abstract
- 定义一个公共的抽象父类
- 定义一个公共 final 的方法(封装所有子类都要遵循的算法框架)
- 算法框架中定义的方法子类实现相同的使用 private 修饰该方法并且实现,子类实现方法不一样的使用 protected abstact 修饰该方法并且不实现
- 让子类重写父类未实现的方法,实现各自的方法
- 在调用的实例对象采用 父类 实例名 = new 子类,在直接调用遵循的框架方法。
实现钩子函数,以达到控制实现分支的作用.
用钩子函数实现子类对算法框架个性化的扩展
钩子
1、框架通过提供一个个的钩子,使框架具备了更大的灵活性。不想执行算法框架中的某些个步骤,我们可以脱钩,如果想执行的话,我们可以挂钩。
实现
2、在抽象类中,提供protected钩子方法。这是个实现的或空的方法。这样子类就可以选择覆写-持钩,也可以选择不覆写-脱勾。
使用
3、提供一个isXXX类型的钩子方法。用该方法控制算法框架中
某个步骤是否执行
4、子类不覆写这个方法,就是脱钩,仍按框架逻辑执行,一旦覆写,就是挂钩,将改变框架算法方向,按子类逻辑执行。
/* * 抽象基类,为所有子类提供一个算法框架 * * 提神饮料 */public abstract class RefreshBeverage { /* * 制备饮料的模板方法 * 封装了所有子类共同遵循的算法框架 */ public final void prepareBeverageTemplate(){ //步骤1 将水煮沸 boilWater(); //步骤2 泡制饮料 brew(); //步骤3 将饮料倒入杯中 pourInCup(); if(isCustomerWantsCondiments()){ //步骤4 加入调味料 addCondiments(); } } /* * Hook, 钩子函数,提供一个默认或空的实现 * 具体的子类可以自行决定是否挂钩以及如何挂钩 * 询问用户是否加入调料 */ protected boolean isCustomerWantsCondiments() { return true; } /* * 基本方法,将水煮沸 */ private void boilWater() { System.out.println("将水煮沸"); } /* * 基本方法,将饮料倒入杯中 */ private void pourInCup() { System.out.println("将饮料倒入杯中"); } /* * 抽象的基本方法,泡制饮料 */ protected abstract void brew(); /* * 抽象的基本方法, 加入调味料 */ protected abstract void addCondiments();}
0 0
- 设计模式2-模板模式
- 【设计模式】## 2、模板模式##
- 设计模式-模板模式
- 设计模式----模板模式
- 设计模式:模板模式
- 设计模式:模板模式
- 设计模式--模板模式
- 设计模式-模板模式
- 设计模式-模板模式
- 《设计模式》- 模板模式
- 设计模式-模板模式
- 设计模式-模板模式
- 设计模式-模板模式
- 设计模式-模板模式
- 设计模式-----模板模式
- 设计模式-模板模式
- 设计模式--模板模式
- 设计模式--模板模式
- 写给部分新入坑做移动端测试(Android)的同学
- hdu 1241 Oil Deposits
- Javascript-基础知识(6)
- shift+鼠标右键文件夹打开命令行直接进入当前目录
- 素因子分解
- 设计模式2-模板模式
- 最小生成树
- Android-单选按钮RadioButton和复选框checkbox
- vim的配置
- gradle 管理依赖库两个问题
- scrapy学习笔记--解析结果存储
- IAM学习备忘
- AVAudioPlayer播放mp3模拟器有声真机无声的解决方法
- [python爬虫]获取html中文乱码时的方法