参考地址:https://blog.csdn.net/u013393958/article/details/80231327
总结:
模板方法模式的实现要素:
1 抽象基类
(1)基本方法
例如:/*基本方法,将水煮沸*/
private void boilWater(){
System.out.println("将谁煮沸");
}
/*基本方法,将饮料倒入杯中*/
private void pourInCup(){
System.out.println("将饮料倒入杯中");
}
(2)抽象方法
例如:
/*抽象的基本方法,泡制饮料*/
protected abstract void brew();
(3)可选的钩子
例如:/*
*Hook,钩子函数,提供一个默认或空的实现,具体的子类可以自行决定是否挂钩以及如何挂钩
*询问用户是否加入调料
*/
protected boolean isCustomerWantsCondiments(){
return true;
}
(4)Template方法(final)
/*
*制备饮料的模板方法
*封装了所有子类共同遵循的算法框架
*/
public final void prepareBeverageTemplate(){
//步骤1将水煮沸
boilWater();
//步骤2 泡制饮料
brew();
//步骤3 将饮料倒入杯中
pourInCup();
if(isCustomerWantsCondiments()){
//步骤4 加入调味料
addCondiments();
}
}
2 具体子类。
(1)实现基类中的抽象方法
(2)覆盖钩子方法
模板方法模式的实现要素
准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法交由子类实现剩余逻辑,用钩子方法给予子类更大的灵活性。最后将方法汇总构成一个不可改变的模板方法。
模板方法模式的适用场景
(1)算法或操作遵循相似的逻辑。
例如:
(2)重构时(把相同的代码抽取到父类中)
(3)重要、复杂的算法那,核心算法设计为模板算法
模板方法模式的优点
(1)封装性好
(2)复用性好
(3)屏蔽细节
(4)便于维护
模板方法模式的缺点
继承方面的