【编程素质】设计模式-模板方法
来源:互联网 发布:阿里云搭建openvpn教程 编辑:程序博客网 时间:2024/05/19 11:37
1,概念
模板方法模式(Template Pattern):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
2,场景
①在某些类的算法中,用了相同的方法,造成代码的重复。
②控制子类扩展,子类必须遵守算法规则。
3,优缺点
优:
①模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
② 子类实现算法的某些细节,有助于算法的扩展。
③ 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
缺:
每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
4,注意:
①模板中,抽象方法越多,子类负荷越重,但同时越有弹性。故请合理使用钩子。(见:5,钩子->场景)
②使用模板方式时,请遵从OO原则-好莱坞原则。
③工厂方法是模板方法中的一种特殊版本。
5,实现:
package template;/** * 咖啡因饮料类 * 抽象类,定义模板,子类继承并实现方法 * @author luo * */public abstract class CaffeineBeverage {/** * 制定模板 * 定义为final,防止子类修改 */final void prepareRecipe(){boilWater();brew();pourInCup();addCondiments();}void boilWater(){System.out.println("boilWater");}/** * 需要子类提供的方法,设置为抽象 */abstract void brew();void pourInCup(){System.out.println("pourInCup");}abstract void addCondiments();}
6,钩子方法
1)概念:
钩子是一个被声明在抽象类中的方法,但只有空的或默认的实现。
2)作用:
①钩子的存在,可以让子类有能力对算法的不同点进行挂钩。要不要挂钩,由子类自行决定。
②作为条件控制,影响抽象类中的算法流程。
③让子类能够有机会对模板方法中某些即将发生的步骤做出反应。
3)场景:
算法在这部分是可选的,就用钩子。是必须的,就用抽象方法。
4)实现:
package template;/** * 咖啡因饮料类 * 抽象类,定义模板,子类继承并实现方法 * @author luo * */public abstract class CaffeineBeverageHook {/** * 制定模板 * 定义为final,防止子类修改 */final void prepareRecipe(){boilWater();brew();pourInCup();/** * 钩子方法通过条件控制,影响抽象类中算法流程 */if (customerWantsCondiments()){addCondiments();}}/** * 钩子方法,通过空的缺省实现。 * 子类可以覆盖这个方法,但不一定要这么做。 * @return */boolean customerWantsCondiments(){return true;}void boilWater(){System.out.println("boilWater");}/** * 需要子类提供的方法,设置为抽象 */abstract void brew();void pourInCup(){System.out.println("pourInCup");}abstract void addCondiments();}
2,钩子方法
1)概念:
钩子是一个被声明在抽象类中的方法,但只有空的或默认的实现。
2)作用:钩子的存在,可以让子类有能力对算法的不同点进行挂钩。要不要挂钩,由子类自行决定。
3)实现:
注意:
①模板中,抽象方法越多,子类负荷越重,但同时越有弹性。故请合理使用钩子。(见:5,钩子->场景)
②使用模板方式时,请遵从OO原则-好莱坞原则。
5.1 在某些类的算法中,用了相同的方法,造成代码的重复。
5.2 控制子类扩展,子类必须遵守算法规则。
- 【编程素质】设计模式-模板方法
- 【编程素质】设计模式-模板方法
- 【编程素质】设计模式-其它
- 【编程素质】设计模式-单例模式
- 【编程素质】设计模式-观察者模式
- 【编程素质】设计模式-策略模式
- 【编程素质】设计模式-装饰模式
- 【编程素质】设计模式-命令模式
- 【编程素质】设计模式-外观模式
- 【编程素质】设计模式-桥接模式
- 【编程素质】多线程编程之设计模式
- 【编程素质】设计模式-工厂模式:工厂方法、简单工厂、抽象工厂
- 【编程素质】设计模式-适配器模式(Adapter)
- 【编程素质】设计模式-单例模式(Singleton pattern)
- C++编程思想(卷二):设计模式:模板方法模式
- 模板方法设计模式
- 模板方法设计模式
- 模板方法设计模式
- 解决iText+flying saucer+freemark导出pdf不支持base64的解决办法
- 阻塞状态的recv返回值
- 《算法》第一章——打印文件目录结构
- ThreadLocal理解
- 10.zabbix学习笔记:记一次zabbix故障引发的排查过程
- 【编程素质】设计模式-模板方法
- Node.js:request+cheerio爬虫爬取免费代理
- makefile命令基本运用(一)
- leetCode练习(115)
- 11月1日 星期二
- OC 学习笔记1
- bzoj 2724: [Violet 6]蒲公英 分块
- 数据结构:线性表之链式存储结构
- C程序设计摘要(二)