Template Method模式 (模型)
我们先介绍什么是模板
就如我们打开CSDN的每一个页面,都有一个已备案提醒的尾标,每一个页面都有,那么是不是每个页面都去添加相同的代码呢?
答:不是的,我们先写一个模板,此模板就具有尾标,我们每个页面都是借助这个母模板,那么我们就不需要手动的去添加了。
那什么是 Template Method(模型)模式
答:在父类中定义处理流程的框架,在子类中实现具体的处理。模板方法仅决定这些抽象方法的执行顺序,这些抽象方法的实现都由子类负责,并且子类不允许覆写模板方法。
示例代码:
假设场景:假如我们的网页对Vip用户和普通用户的请求有不同的响应。
public class TemplateMethodTest {
public static void main(String[] args) {
//普通用户请求时
MotherAbstractClass common = new CommonConcreteClass();
common.response();
//vip用户请求时
MotherAbstractClass vip = new VipConcreteClass();
vip.response();
}
}
abstract class MotherAbstractClass {
public final void response() {
open();
data();
}
public abstract void open();
public abstract void data();
}
class VipConcreteClass extends MotherAbstractClass {
@Override
public void open() {
System.out.println("我是vip");
}
@Override
public void data() {
System.out.println("我是vip的响应数据");
}
}
class CommonConcreteClass extends MotherAbstractClass {
@Override
public void open() {
System.out.println("我是普通用户");
}
@Override
public void data() {
System.out.println("我是普通的响应数据");
}
}
UML类图
什么时候使用
其实我们在不知不觉中就会使用到模板模型,返回看iterate模型、adapter模型等,都会发现我们其实已经使用过了,那我们又为什么去学习这种设计模式呢?只能说,我们现在爬的山还不够高,看的不远,前人的智慧总结,用时方恨少。
- 可以使逻辑处理通用化,更方便判断错误
- 父类约束子类,使双方更加协调