模版方法模式
我的理解:模版方法模式就是将子类相同部分的代码和相同的步骤给抽象出一个父类。
百度百科 :
模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤
使用场景
- 多个子类有公有的方法,并且逻辑基本相同时。
- 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
- 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通 过钩子函数(见“模板方法模式的扩展”)约束其行为。
例子
下班回家,先到公交车站,然后坐公交车回家,最后到家。
类图:
![]()
打工人1和打工人2都继承抽象类
打工人1选择走路去车站,打工人2选择骑自行车去车站
抽象模板下班类
public abstract class GoOffWorkModel {
// 去车站
public abstract void goStation();
// 坐车
public abstract void byCar();
// 到家
public abstract void goHome();
// 下班模版方法
public void goOffWork() {
this.goStation();
this.byCar();
this.goHome();
}
}
打工人
// 打工人1
public class OfficeWorker1 extends GoOffWorkModel{
@Override
public void goStation() {
System.out.println("打工人1走路去车站");
}
@Override
public void byCar() {
System.out.println("打工人1坐公交车");
}
@Override
public void goHome() {
System.out.println("打工人1到家");
}
}
// 打工人2
public class OfficeWorker2 extends GoOffWorkModel{
@Override
public void goStation() {
System.out.println("打工人2骑自行车去车站");
}
@Override
public void byCar() {
System.out.println("打工人2坐公交车");
}
@Override
public void goHome() {
System.out.println("打工人2到家");
}
}
测试
public class Test {
public static void main(String[] args) {
GoOffWorkModel worker1 = new OfficeWorker1();
worker1.goOffWork();
System.out.println("=====================");
GoOffWorkModel worker2 = new OfficeWorker2();
worker2.goOffWork();
}
}
结果
