一、什么是模板方法模式
模板设计方式:在一个方法中定义一个算法骨架,而将一些方法的实现放到子类中,这样使在不改变算法结构的情况下,重新定义算法中的一些步骤
ps:什么是模板,简单点说就是一个方法,这个方法定义了一组算法步骤。任何步骤都可以是抽象的,这些抽象的方法由子类来实现。
二、使用场景
多个类有共同的方法步骤,可以将这些共同的方法放在父类中,不同的实现设为抽象方法,由子类实现。
三、模式构成(网上扒的图,,)
四、举个例子
abstract class Make{
/*
* 这是模板方法,里面定义了两个抽象的方法,
* 这两个方法的实现可以在子类中完成,以此在不破坏算法框架代码
* 结构的情况下,能完成任务
* */
public void makeDrink(){
boil();
addMaterial();//具体的实现放在子类里
addOther();具体的实现放在子类里
close();
hook();//这个等会解释
}
public void boil(){
System.out.println("烧水~~~");
}
public abstract void addMaterial();
public abstract void addOther();
public void close(){
System.out.println("盖盖子~~~");
}
public void hook(){}
}
//对于抽象方法的具体实现
class MakeCoffee extends Make{
@Override
public void addMaterial() {
System.out.println("添加咖啡豆");
}
@Override
public void addOther() {
System.out.println("加点糖");
}
}
//抽象方法的具体实现
class MakeTea extends Make{
@Override
public void addMaterial() {
System.out.println("添加茶叶");
}
@Override
public void addOther() {
System.out.println("加点柠檬片");
}
//稍后解释,为了扩展功能
@Override
public void hook() {
System.out.println("滤掉茶叶");
}
}
public class Template1 {
public static void main(String args[]){
Make coffee=new MakeCoffee();
Make tea=new MakeTea();
coffee.makeDrink();
tea.makeDrink();
}
}
烧水~~~
添加咖啡豆
加点糖
盖盖子~~~
烧水~~~
添加茶叶
加点柠檬片
盖盖子~~~
滤掉茶叶
五、补充
1)为了防止模板方法被修改,可以将模板方法设置为final
2)hook的作用:
hook为钩子,它在父类中实现,却没有任何内容,作用是为了方便扩展与补充,如果子类需要一些特定的行为,可以定义hook的内容,如果不需要,完全可以置之不理。
ps:菜鸟一枚,如有不对请大佬指出,谢谢谢谢~~~~