模板方法模式是什么?
简单来说,就是把重复的方法或固定的行为顺序封装成接口,个性部分由子类来实现即可!
通过案例来理解模板方法模式
通过银行取款或者存款的流程(取号,等待,取款/存款,评价)来理解模板方法模式!
1、首先定义父类,来吧一些公共的方法,行为顺序抽象出来!
abstract class Business{
private Integer serialNo;
public final void takeNumber(){
System.out.println("我来取号了~~~");
Random random = new Random();
this.serialNo = random.nextInt(100);
System.out.println("取到的号码为:" + this.serialNo);
}
public final void waiting(Integer serialNo){
System.out.println(serialNo.intValue() + "号,在等待被叫那~~~");
}
abstract void sonShowTime(Integer serialNo);
public Boolean isGoodevaluate(){
return true;
}
public final void evaluate(Integer serialNo){
if (isGoodevaluate()){
System.out.println(serialNo.intValue() + "号给了五星好评!");
}else{
System.out.println(serialNo.intValue() + "号给了差评差评差评!");
}
}
public final void process(){
this.takeNumber();
this.waiting(serialNo);
this.sonShowTime(serialNo);
this.evaluate(serialNo);
}
}
2、子类根据自己的需要来实现相应的功能
class Deposit extends Business{
@Override
void sonShowTime(Integer serialNo) {
System.out.println(serialNo + "号来存款了~");
}
@Override
public Boolean isGoodevaluate(){
return true;
}
}
class WithdarwMoney extends Business{
@Override
void sonShowTime(Integer serialNo) {
System.out.println(serialNo + "号来取款了~");
}
@Override
public Boolean isGoodevaluate(){
return false;
}
}
3、测试调用
public class TemplateDemo {
public static void main(String[] args) {
Deposit deposit = new Deposit();
deposit.process();
System.out.println("-------------------------");
WithdarwMoney withdarwMoney = new WithdarwMoney();
withdarwMoney.process();
}
}
模板方法模式的优缺点有哪些?
优点:
行为统一由父类控制,子类来实现细节,符合开闭原则!通过抽取重复部分,提高了代码的复用性
缺点:
如果父类添加新的方法,则可能造成牵一发而动全身如果子类太多,会提升阅读的复杂性
感谢大家的阅读,我是爱你三千遍,一个喜欢把简单问题复杂化,把复杂问题简单化的程序猿! ❤
参考博客一
参考博客二



