定义
- 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。
模板方法设计模式主要点
- 定义一个抽象类(Abstract Class):该抽象类负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成
- 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。
- 基本方法:是整个算法中的一个步骤。(可以给不同的子类去实现,抽象方法或者是空方法,反正由子类实现或重写,效果一样)
代码实现
抽象方法:
public abstract class TemplateMethod {
// 模板方法,定义了算法骨架,按某种顺序调用其包含的基本方法
public final void shopping() {
// 1.登录
userLoging();
// 2.购物
buy();
// 3.付款
pay();
}
// 子类不能重写的方法
public final void userLoging() {
System.out.println("登录购物网站!");
}
// 子类必须实现
public abstract void buy();
// 钩子方法
public void pay() {
System.out.println("使用银联支付");
}
}
抽象类的子类一:
public class PhoneShopping extends TemplateMethod {
@Override
public void buy() {
System.out.println("购物购买苹果手机");
}
}
抽象类的子类二:
public class computerShopping extends TemplateMethod {
@Override
public void buy() {
System.out.println("购物购买小米笔记本!");
}
@Override
public void pay() {
System.out.println("使用支付宝支付");
}
}
测试方法:
public class MyTest {
public static void main(String[] args) {
TemplateMethod shopping = new PhoneShopping();
TemplateMethod shopping2 = new computerShopping();
shopping.shopping();
System.out.println("-------------------");
shopping2.shopping();
}
}
运行结果:
登录购物网站!
购物购买苹果手机
使用银联支付
-------------------
登录购物网站!
购物购买小米笔记本!
使用支付宝支付
小结
其实模板方法设计模式很简单,核心思想就是:把固定的具体步骤定好后,把变的部分留给各个子类去实现。