模板方法模式
既然叫做模板方法,从字面上大致就知道,应该是所有的实现有共性。抽取可共性的部分,个性的部分由具体实现类来实现。
举个栗子:
我们给客服打电话办理业务,要先拨号码,然后办理业务,最后要给客服打分,那么,共性的拨号和评价部分,就可以放在一个父类中,而办理的业务由于是不同的客户有不同的业务,所有由顾客自己选择。
/**
* @author: hx
* @Time: 2019/5/17
* @Description: Business
*/
public abstract class Business {
public void dealWithService(){
System.out.println("拨打号码");
operation();
System.out.println("打分评价");
}
/**
* 办理业务
*/
protected abstract void operation();
}
/**
* @author: hx
* @Time: 2019/5/17
* @Description: ChangeBusiness
*/
public class ChangeBusiness extends Business {
@Override
protected void operation() {
System.out.println("修改业务");
}
}
/**
* @author: hx
* @Time: 2019/5/17
* @Description: CheckBalance
*/
public class CheckBalance extends Business {
@Override
protected void operation() {
System.out.println("查询余额");
}
}
打个电话办个业务
public static void main(String[] args){
Business business = new CheckBalance();
Business business2 = new ChangeBusiness();
business.dealWithService();
business2.dealWithService();
}
输出结果:
拨打号码
查询余额
打分评价
拨打号码
修改业务
打分评价
模板模式的优点
(1)具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构。
(2)代码复用的基本技术,在数据库设计中尤为重要。
(3)存在一种反向的控制结构,通过一个父类调用其子类的操作,通过子类对父类进行扩展增加新的行为,符合“开闭原则”。
不足
每个不同的实现都需要定义一个子类,会导致类的个数增加,系统更加庞大。