设计模式——模板方法
- 抽象类(AbstratClass):定义模板方法,定义算法骨架(定义抽象方法)
- 具体类(ConcreteClass):实现抽象类种的抽象方法,从而实现完整的算法
代码实现
public class TemplateMethod01 {
static abstract class AbstractSpouse{
//抽象类定义整个夫妻外出的流程骨架 他们出行的模板就是 1,准备出们 2,然后选择交通工具 所以可以定义一个模板去执行这个操作,具体的操作需要在实现类种去定义
public void goOut(){
ready();
travelMode();
}
//出行前的准备
protected abstract void ready();
//出行的方式
protected abstract void travelMode();
}
/**
* Man的类 需要对自己的 ready travelMode 去实现
*/
static class Man extends AbstractSpouse{
@Override
protected void ready() {
System.out.println("穿好衣服...");
}
@Override
protected void travelMode() {
System.out.println("去到车库开车...");
}
}
/**
* Wife的类 需要对自己的 ready travelMode 去实现
*/
static class Wife extends AbstractSpouse{
@Override
protected void ready() {
System.out.println("洗脸,化妆1个小时,选衣服半个小时...");
}
@Override
protected void travelMode() {
System.out.println("坐老公的车...");
}
}
public static void main(String[] args) {
Man man = new Man();
man.goOut();
Wife wife=new Wife();
wife.goOut();
}
}
分析:
因为在夫妻出门的这个操作上,就有准备和出门的方式,这个时候我们的就可以定义一个抽象的类 AbstractSpouse 然后定义goOut方法在这个方法种先执行的是ready方法然后是travelMode方法,这个两个方法都需要设置为抽象方法(继承这个抽象类必须要实现这两个方法)。在丈夫和妻子类种对于ready和travelMode的具体的实现是不同的,但是我们对于创建Man 和Wife 对象调用goOut方法的时候goOut方法里执行的ready和travelMode方法是由Man和Wife类具体实现的