设计模式之——模板方法(Template Method)模式
模板方法模式定义
定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。
模板方法模式的优点
- 它封装了不变部分,扩展可变部分,便于子类继续扩展。
- 部分方法是由子类实现的,符合开闭原则。
模板方法模式的缺点
- 对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。
- 父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。
模板方法模式的实现
定义一个抽象类
/**
* @ClassName AbstractObject
* @Description TODO
* @Author mamingcong
* @Date 2020/6/15 20:01
* @Version 1.0
*/
public abstract class AbstractObject {
public void templateMethod() {
specificMethod();
abstractMethod1();
abstractMethod2();
}
public abstract void abstractMethod1();
public abstract void abstractMethod2();
public void specificMethod() {
System.out.println("我是具体方法");
}
}
定义抽象类的子类
/**
* @ClassName SubObject
* @Description TODO
* @Author mamingcong
* @Date 2020/6/15 20:03
* @Version 1.0
*/
public class SubObject extends AbstractObject{
@Override
public void abstractMethod1() {
System.out.println("我是method1");
}
@Override
public void abstractMethod2() {
System.out.println("我是method2");
}
}
测试
/**
* @ClassName Test
* @Description TODO
* @Author mamingcong
* @Date 2020/6/15 20:05
* @Version 1.0
*/
public class Test {
public static void main(String[] args) {
AbstractObject abstractObject= new SubObject();
abstractObject.templateMethod();
}
}
运行结果
我是具体方法
我是method1
我是method2
模板方法模式的使用场景
- 算法结构的定义,实现由其子类实现;
- 当多个子类存在公共的行为时,可以将其提取出来并集中到一个公共父类中以避免代码重复;