模板设计模式
定义一个抽象父类,在该中组织子类方法的调用,在这个类中定义出一个方法来实现子类方法调用的组织,这个方法叫作模板方法,该类叫作模板类。
- 模板方法:组织子类方法的调用,定义出一个骨架
- 抽象方法:要求子类覆写的方法
- final修饰的方法:该方法不让被子类覆写(比如说吃饭的方法就是要求子类自己选择方式)
- 钩子方法:在父类中默认实现了,子类可以选择性覆写,方法名一般以do开头
package mubanns;
public abstract class Templetpattern {
/*
* 下订单是必须下的,不能让子类区选择
*/
public final void placeOrder(){
System.out.println("下订单!");
}
/*
* 抽象方法,子类必须覆写,因为吃饭的方式每个人可能不一样
*/
public abstract void haveMeal();
/*
* 子类可以选择性覆写
*/
public void doHaveFruit(){
System.out.println("默认就是吃香蕉");
}
/**
* 不覆写
*/
public final void acount(){
System.out.println("只能使用现金");
}
/*
* 模板方法
*/
public void enjoy (){
this.placeOrder();
this.haveMeal();
this.doHaveFruit();
this.acount();
}
}
package mubanns;
public class Africa extends Templetpattern{
/**
* 必须覆写
*/
@Override
public void haveMeal() {
System.out.println("使用手抓吃饭");
}
/*
* 选择覆写
*/
public void doHaveFruit(){
System.out.println("吃苹果");
}
}
public class Chinese extends Templetpattern {
@Override
public void haveMeal() {
System.out.println("使用筷子吃饭");
}
}
public class European extends Templetpattern {
@Override
public void haveMeal() {
System.out.println("使用刀叉吃饭");
}
}
抽象模板
- 定义一个或多个抽象操作,以便让子类实现。这些抽象操作叫作基本操作
- 定义并实现了一个模板方法。这个模板方法一般是一个具体的方法,他给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类中实现。
- 具体模板:实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。