模板方法模式的定义理解:
模板方法:父类中定义好算法的的完整执行框架,子类根据自身需求实现具体的算法步骤;
比如珍珠奶茶的制作流程,可以总结出一套固定的执行流程,
1.先准备一杯清水河一个塑料杯子
2.在准备好的塑料杯中添加珍珠奶茶需要的原料和水混合
3.将准备好的奶茶密封起来,完工了;
上面是总体上的珍珠奶茶的制作完整流程;但是客户A需要原味的珍珠奶茶,客户B需要奶香的珍珠的奶茶,
所以具体制作的时候,在第二部中根据客户的需求添加不同的原料来制作;
这个就是整体制作流程不改变,但是具体做那种味道的,完全是更具需求的变化;
模板方法模式的UML图
BubbleTea里面的三个方法对应了奶茶制作的三步流程;
各种奶茶不需要实现全部的流程,只需要制作自己的独特的味道,实现的定的方法mix();,因为只有这一步有变化;
模板方法模式代码实操:
1.首先珍珠奶茶的整体制作:
public abstract class BubbleTea {
/**
* 珍珠奶茶的生产步骤,这个步骤无需重新区写了
*/
public final void processBubbleTea() {
// 1.准备好亲水和塑料杯
prepare();
// 2.添加调料
mix();
// 3.制作完成了
finishTea();
}
private void prepare() {
System.out.println("准备好亲水和塑料杯");
}
/**
* 原材料种类多样,这里不能够统一实现,所以需要子类看情形一一去实现
*/
protected abstract void mix();
private void finishTea() {
System.out.println("奶茶密封");
}
}
2,各种口味的珍珠奶茶的制作
/**
* 原味珍珠奶茶
*
* @author shion
*
*/
public class A extends BubbleTea {
@Override
protected void mix() {
System.out.println("混和了原味的奶茶");
}
}
/**
* 奶香味的珍珠奶茶
*
* @author shion
*
*/
public class B extends BubbleTea {
@Override
protected void mix() {
System.out.println("混和了奶香味道的奶茶");
}
}
3,代码实操验证
public class Test {
public static void main(String[] args) {
// 制作原味奶茶
BubbleTea a = new A();
a.processBubbleTea();
System.out.println("******************************");
// 制作奶香为奶茶
BubbleTea b = new B();
b.processBubbleTea();
}
}
打印如下:
准备好亲水和塑料杯
混和了原味的奶茶
奶茶密封
******************************
准备好亲水和塑料杯
混和了奶香味道的奶茶
奶茶密封
以上就是我对模板方法模式的理解认识;