-
模版设计模式通俗的说法:
-
使用公共父类实现一个算法不变的部分,让子类来实现可变的部分。
-
例子:泡一杯茶或者咖啡:
-
第一步:将水煮沸 ------------------------不变的部分
-
第二步:加入咖啡或者茶--------------------可变的部分
-
第三步:将饮料导入杯子中------------------不变的部分
-
第四步:根据咖啡或者茶加入不同的调味品-------可变的部分
-
第一和第三步,不管泡茶还是咖啡都需要做的不变的部分,这个用公共父类来实现。
-
第二和第四步,需要根据咖啡或者茶采取不同的做法,这个通过子类来实现。
/**
* 模版设计模式通俗的说法:
* 使用公共父类实现一个算法不变的部分,让子类来实现可变的部分。
*
* 例子:泡一杯茶或者咖啡:
* 第一步:将水煮沸 ------------------------不变的部分
* 第二步:加入咖啡或者茶--------------------可变的部分
* 第三步:将饮料导入杯子中------------------不变的部分
* 第四步:根据咖啡或者茶加入不同的调味品-------可变的部分
*
* 第一和第三步,不管泡茶还是咖啡都需要做的不变的部分,这个用公共父类来实现。
* 第二和第四步,需要根据咖啡或者茶采取不同的做法,这个通过子类来实现。
*/
public abstract class masterplateModel {
public void makeDrink(){
// * 第一步:将水煮沸 ------------------------不变的部分
boiling();
// * 第二步:加入咖啡或者茶--------------------可变的部分
add();
// * 第三步:将饮料导入杯子中------------------不变的部分
fall();
// * 第四步:根据咖啡或者茶加入不同的调味品-------可变的部分
sauce();
}
public void boiling(){
System.out.println("将水煮沸");
}
public abstract void add();//使用抽象方法,让子类根据情况自我实现
public void fall(){
System.out.println("将饮料导入杯子中");
}
public abstract void sauce();//使用抽象方法,让子类根据情况自我实现
}
/**
* 每个子类只实现父类中不一样的方法
*/
public class Tea extends masterplateModel{
@Override
public void add() {
System.out.println("加入茶");
}
@Override
public void sauce() {
System.out.println("加入柠檬或者奶");
}
}
/**
* 每个子类只实现父类中不一样的方法
*/
public class Coffee extends masterplateModel{
@Override
public void add() {
System.out.println("加入咖啡!~");
}
@Override
public void sauce() {
System.out.println("加点糖!~");
}
}
public class masterplateDemo {
public static void main(String[] args) {
masterplateModel tea = new Tea();
tea.makeDrink();
masterplateModel coffee = new Coffee();
coffee.makeDrink();
}
}