本文介绍模板方法模式,介绍基本应用场景和核心设计思路
简介
Template Method 模板方法模式,是行为模式之一
把具有特定步骤算法中的某些必要处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为
重点:步骤相同,合并执行;细节不同,分治实现。
应用场景
- 具有统一的操作步骤或操作过程
- 具有不同的操作细节
- 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同
模板方法模式结构图
角色和职责
- AbstractClass:抽象类的父类
- ConcreteClass:具体的实现子类
- templateMethod():模板方法
- method1() 与 method()2:具体步骤方法
实现
这里以造车为例,设计一个造车的步骤模板。然后不同的车型有不同的实现细节。
模板类
package com.mym.designmodel.template;
/**
* 职责:抽象类的父类。模板类
*/
public abstract class MakeCar {
public abstract void makeHead();//模板步骤方法
public abstract void makeBody();//模板步骤方法
public abstract void makeTail();//模板步骤方法
//执行方法
public void make(){
this.makeHead();
this.makeBody();
this.makeTail();
}
}
其中一个实现子类1
package com.mym.designmodel.template;
/**
* 职责:具体实现子类
*/
public class MakeBus extends MakeCar {
@Override
public void makeHead() {
System.out.println("造Bus车头");
}
@Override
public void makeBody() {
System.out.println("造Bus车身");
}
@Override
public void makeTail() {
System.out.println("造Bus车尾");
}
}
其中一个实现子类2
package com.mym.designmodel.template;
/**
* 职责:具体实现子类
*/
public class MakeCart extends MakeCar{
@Override
public void makeHead() {
System.out.println("造Cart车头");
}
@Override
public void makeBody() {
System.out.println("造Cart车身");
}
@Override
public void makeTail() {
System.out.println("造Cart车尾");
}
}
测试
package com.mym.designmodel.template;
/**
* 测试使用
*/
public class MainClass {
public static void main(String[] args) {
MakeCar bus = new MakeBus();
bus.make();
System.out.println("----------");
MakeCar cart = new MakeCart();
cart.make();
}
}
输出
造Bus车头
造Bus车身
造Bus车尾
----------
造Cart车头
造Cart车身
造Cart车尾
总结:使用模板方法模式重点在于模板设计和职责的明确上。