什么是模板方法模式?
模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。实现方式主要是子类继承父类。
结构图
AbstractClass是抽象类,其实也就是一抽象模板,定义并实现了一个模版方法。这个模版方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。
为什么有模板方法模式?
很多时候,多个子类会有很多相同的不变的行为,那么将这些不变的行为抽离到父类中去复用,子类就只需要关注改变的部分而无需关注不变的行为,这样既可以很大程度上提高代码的复用率,又可以使子类摆脱重复的不变行为的纠缠。
代码实现
package com.wlj.templateMethod;
/**
* @author wlj
* @Classname AbstractClass
* @Description 抽象出来的公共部分
* @Date 7/17/2022 10:23 PM
*/
public abstract class AbstractClass {
public void operation(){
System.out.println("Your answer is " + answer());
}
public abstract String answer();
}
package com.wlj.templateMethod;
/**
* @author wlj
* @Classname ConcreteA
* @Description A的具体实现
* @Date 7/17/2022 10:26 PM
*/
public class ConcreteA extends AbstractClass{
@Override
public String answer() {
return "A";
}
}
package com.wlj.templateMethod;
/**
* @author wlj
* @Classname ConcreteA
* @Description B的具体实现
* @Date 7/17/2022 10:26 PM
*/
public class ConcreteB extends AbstractClass{
@Override
public String answer() {
return "B";
}
}
package com.wlj.templateMethod;
/**
* @author wlj
* @Classname Client
* @Description 客户端调用
* @Date 7/17/2022 10:27 PM
*/
public class Client {
public static void main(String[] args) {
// 多态
AbstractClass A = new ConcreteA();
AbstractClass B = new ConcreteB();
A.operation();
B.operation();
}
}
// 结果
Your answer is A
Your answer is B