定义
- 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
UML图
-
如图所示
模版方法模式UML图.png -
AbstractClass:模版类主要包括基本方法和模版方法
- 基本方法:由子类来实现,是一个抽象方法
- 模版方法:内部调用基本方法
-
AbstractClassImplOne、AbstractClassImplTwo :模版类的实现子类,实现了基本方法
-
Client:场景类
模版代码
-
抽象类代码
/** * @author : zhangqi * @time : 2020/9/21 * desc : 模版方法模式中的抽象类 * 基本方法:是由子类来实现的, * 模版方法:模版方法是用来调用基本方法的 */ public abstract class AbstractClass { //基本方法 protected abstract void doSomething(); //基本方法 protected abstract void doAnyThing(); //模版方法 public void templateMethod() { doSomething(); doAnyThing(); } }
-
实现类代码
/** * @author : zhangqi * @time : 2020/9/21 * desc : 抽象类实现类One */ public class AbstractClassImplOne extends AbstractClass { @Override protected void doSomething() { } @Override protected void doAnyThing() { } } /** * @author : zhangqi * @time : 2020/9/21 * desc : 抽象类的实现类Two */ public class AbstractClassImplTwo extends AbstractClass { @Override protected void doSomething() { } @Override protected void doAnyThing() { } }
-
场景类
/** * @author : zhangqi * @time : 2020/9/21 * desc : 场景类,用来书写业务 */ public class TemplateClient { public static void main(String[] args) { //抽象实现类one AbstractClassImplOne abstractClassImplOne = new AbstractClassImplOne(); abstractClassImplOne.templateMethod(); //抽象实现类two AbstractClassImplTwo abstractClassImplTwo = new AbstractClassImplTwo(); abstractClassImplTwo.templateMethod(); } }
优缺点
优点
- 封装不变部分,扩展可变部分
- 提取公共部分,便于维护
- 行为由父类控制,子类去实现
缺点
- 子类执行的结果影响了父类。
- 抽象类中的模版方法用来执行基本方法,子类实现类实现了基本方法,基本方法的执行结果影响着模版方法。
网友评论