模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类不可以改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式中的角色:
- AbstractClass:抽象类,定义了一套算法框架。
- ConcreteClass:具体实现类。
模板方法的简单实现
(1)创建抽象类,定义算法框架
public abstract class AbstractClass {
public abstract void primitiveOperation1();
public abstract void primitiveOperation2();
public void templateMethod() {
primitiveOperation1();
primitiveOperation2();
}
}
(2)具体实现类
public class ConcreteClassA extends AbstractClass{
@Override
public void primitiveOperation1() {
System.out.println("具体类A方法1实现");
}
@Override
public void primitiveOperation2() {
System.out.println("具体类A方法2实现");
}
}
public class ConcreteClassB extends AbstractClass{
@Override
public void primitiveOperation1() {
System.out.println("具体类B方法1实现");
}
@Override
public void primitiveOperation2() {
System.out.println("具体类B方法2实现");
}
}
(3)客户端调用
public class Client {
public static void main(String[] args) {
AbstractClass abstractClass = new ConcreteClassA();
abstractClass.templateMethod();
System.out.println("---------------------------");
abstractClass = new ConcreteClassB();
abstractClass.templateMethod();
}
}
(4)输出
具体类A方法1实现
具体类A方法2实现
---------------------------
具体类B方法1实现
具体类B方法2实现
模板方法模式的使用场景
使用场景:
多个子类有共有的方法,并且逻辑基本相同时。
面对重要、复杂的算法,可以把核心算法设计为模板方法,周边相关细节功能则由各个子类实现。
需要通过子类来决定父类算法中的某个步骤是否执行,实现子类多父类的反向控制。
模板方法模式的优缺点
优点:
模板方法模式通过把不变的行为搬移到超类,去除了子类中的重要代码。
子类实现算法的某些细节,有助于算法的扩展。
缺点:
每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
网友评论