模板模式比较简单的一种设计模式,他以抽象类抽出公共的方法;由子类实现。就像一个模版一样的。每继承一个都要实现里面公告的方法。大家会说这不就是做项目的时候写的baseDao吗?没错。就是这个样的应用。
里面会有一种方法要注意下。就是钩子的使用。是指公共类中有一个抽象的方法,但是这个方法不是每个对象都需要调用的。也可能不调用,比如汽车模型,有一个需要实现喇叭的功能,但是有一个不需要使用;这样的场景下就可以使用钩子的模式。
基本类图。
代码实现。
public abstract class CarT {
protected boolean hook = true;
protected abstract void startCar() ;
protected abstract void stopCar() ;
final public void carRun(){
this.startCar();
System.out.println("汽车运行中");
if(this.hook){
this.isWhistled();
}
this.stopCar();
}
final public void isWhistled(){
System.out.println("汽车鸣笛");
}
public void setHook(boolean _flag){
this.hook = _flag;
}
}
public class CarA extends CarT {
public void startCar(){
System.out.println("汽车A启动声音是嘟嘟~");
}
@Override
public void stopCar() {
System.out.println("汽车A停止声音是滴滴~");
}
}
public class CarB extends CarT {
@Override
protected void startCar() {
System.out.println("汽车B启动的声音是咚咚~");
}
@Override
protected void stopCar() {
System.out.println("汽车B启动的声音是叮叮~");
}
}
public class client {
public static void main(String args[]){
CarT carA = new CarA();
carA.setHook(false);
carA.carRun();
System.out.println("======");
CarT carB = new CarB();
carB.carRun();
}
}
这是一个比较简单的一个设计模式。大家应该都见过的。