在模板模式中,抽象类公开定义了执行它的方式/模板,然后在其子类中进行具体的实现。‘
可以理解为 抽象类定义了一套做事情的规则,而具体的类去实现这套规则中的具体步骤。
关键代码在抽象类当中进行实现,而具体的代码则在具体的类中再实现。
应用案例:
说,要把大象装冰箱,需要分为三个步骤。
第一:把冰箱门打开 第二:把大象装进去 第三:关上冰箱门
首先定义一个抽象类来定义这个规则,代码如下:
AbstractModel.java
package com.zwz.test6;
public abstract class AbstractModel {
public abstract void openDoor(); //打开门的规则
//关闭门规则
public abstract void closeDoor();
//把东西放进去的规则
public abstract void putTheAnimalIn();
//把大象装进冰箱的方法,整体步骤定义好
public final void putAnimalToRefrigerator(){
openDoor();
putTheAnimalIn();
closeDoor();
}
}
一个具体的类去实现这些个操作
public class MyModel extends AbstractModel {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public MyModel(String name) {
super();
this.name = name;
}
@Override
public void openDoor() {
// TODO Auto-generated method stub
System.out.println("打开冰箱门");
}
@Override
public void closeDoor() {
// TODO Auto-generated method stub
System.out.println("关上冰箱门");
}
@Override
public void putTheAnimalIn() {
// TODO Auto-generated method stub
System.out.println("把" + name +"放到冰箱当中!!");
}
}
定义一个方法进行测试:
public class TestModel {
public static void main(String[] args) {
AbstractModel model = new MyModel("大象");
model.putAnimalToRefrigerator();
}
}
测试结果:
这里值得注意的地方是,为了防止 AbstractModel 中的 putAnimalToRefrigerator 方法被子类重写而破坏规则,所以在这里,这个方法上加上了final 进行方法的修饰。