梦想还是要有的,万一忘了咋办?

0%

模版方法模式

概述

行为模式,定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

类图

upload successful

角色

  • 抽象模版(Abstract Template)角色:
    该角色定义一个后者多个抽象操作,以便让子类实现;这些抽象操作是基本操作,是一个顶级逻辑的组成步骤。还需要定义并实现一个或几个模版方法,这些模版方法一般是具体方法,即一个框架,实现对基本方法的调度,完成固定逻辑。
  • 具体模版(ConcreteTemplate)角色:
    该角色实现抽象模版中定义的一个或者多个抽象方法,每一个抽象模版角色都可以有任意多个具体模版角色与之对应,而没一个具体模版角色都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同。

示例

AbstractClass.java

1
2
3
4
5
6
public abstract class AbstractClass{
protected abstract void operation();
public void templateMethod(){
this.operation();
}
}

ConcreteClass.java

1
2
3
4
5
6
public class ConcreteClass extends AbstractClass{
protected void operation(){
  //do some things
  }

}

Client.java

1
2
3
4
5
6
public class Client{
public static void main(String args[]){
AbstractClass ac=new ConcreteClass();
ac.templateMethod();
}
}

应用

优点

  • 封装不变的部分,扩展可变的部分。不变的部分封装到父类中实现,可变的部分则可以通过继承进行扩展。
  • 提取公共代码部分,便于维护。将公共部分的代码提取出来放在父类中,维护时只需要修改父类中的代码。
  • 行为由父类控制,子类实现。模版方法模式中的基本方法是由子类实现的,因此子类可以通过扩展增加相应的功能复合开闭原则。

应用场景

  • 多个子类有公共方法,并且逻辑基本相同时。
  • 可以把重要的、复杂的、核心算法设计为模版方法,周边的相关细节功能则由各个子类实现。
  • 重构时,模版方法模式是一个经常使用的模式,将相同的代码抽取到父类中。

实例

upload successful