模板方法
Posted endian11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板方法相关的知识,希望对你有一定的参考价值。
- 定义:定义一个操作中的算法框架,而将这些步骤延迟到子类中,使得子类不改变一个算法的结构即可重新定义算法的某些步骤
- 在模板方法模式中有如下角色:
- AbstractClass:抽象类,定义了一套算法框架
- ConcreteClass:具体实现类
- 模板方法的简单实现
- 模板方法实际上就是封装固定的流程,像模板一样,第一步做什么,第二步做什么,都在抽象类中定义好。子类可以有不同的算法实现,在算法框架不被修改的前提下实现某些步骤的算法替换
- 创建抽象类
public abstract class Game { public final void play() { init(); start(); if (hook()) { end(); } saowei();//钩子方法,基类空实现,子类视情况决定是否实现 } private void saowei() { } protected abstract void init(); protected abstract void start(); protected abstract void end(); protected boolean hook() { return true; } }
- 具体实现类
public class AGame extends Game { @Override protected void init() { System.out.println("AGame::init()"); } @Override protected void start() { System.out.println("AGame::start()"); } @Override protected void end() { System.out.println("AGame::end()"); } @Override protected boolean hook() { System.out.println("not execute AGame::end()"); return false; } }
- 使用场景
- 多个子类共有的方法,并且逻辑基本相同
- 面对重要、复杂的算法,可以把核心算法设计为模板方法,周边相关细节功能由各个子类实现
- 需要通过子类来决定父类算法中的某个步骤是否执行,实现子类对父类的反向控制
- 优点
- 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码
- 子类实现算法的某些细节,有助于算法的扩展
- 缺点
- 每个不同的实现都需要定义一个子类,这会导致类的个数增加,设计更加抽象
以上是关于模板方法的主要内容,如果未能解决你的问题,请参考以下文章