美文网首页
模板方法模式

模板方法模式

作者: _fan凡 | 来源:发表于2019-03-26 23:48 被阅读0次

模板方法模式,顾名思义,就是处理一个业务,按照一定的模板来进行处理,也就是说在对一个业务进行处理的时候,第一步做什么,第二步做什么。。。 已经完全定义好了,但是具体每一步的实现可能根据不同场景而有所不同。
其英文定义是:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing th altgorithm's structure.
定义一个操作中算法的框架,将一些步骤延迟到子类。末班方法允许子类在不改变算法结构即可重新定义算法的某些步骤。

模板方法模式看起来确实非常简单,只是用了java中的继承机制。一般是一个抽象类,然后有不同的子类继承。抽象类中的方法分为两类,一类是基本方法,一般是protected访问权限,抽象方法,具体实现交由子类,一类是模板方法,一般只有一个,也可以有几个,实现对基本方法的调度顺序和逻辑,是public访问权限,在抽象类中实现,一般为了防止恶意操作,会加上final修饰符,固定好调度顺序和逻辑,不允许子类进行更改。通用模板方法模式类如下:
public abstract class AbstractClass{
protected abstract void method1();

protected abstract void method2();

protected abstract void method3();

public final void templateMethod(){
    method1();
    method3();
    method2();
}

}

public class SubClass1 extends AbstractClass {
protected void method1(){
// do something
}

protected void method2(){
    // do something
}

protected void method3(){
    // do something
}

}

模板方法模式的有点:
1、封装不变部分,扩展可变部分,把认为不变的部分的算法封装到抽象类实现,并且加上final修饰,而可变的部分在子类中具体实现。
2、提取了公共代码,便于维护
3、行为由父类控制,子类实现

使用场景:
多个子类有公共的方法,并且处理逻辑基本相同时
重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能择优各个子类实现

模板方法的扩展
一般模板方法的扩展,就是使用所谓的钩子方法,就是声明额外的public方法,不同的子类有不同的实现并有不同的返回值,这些返回值会影响模板方法的执行逻辑或者顺序。

相关文章

网友评论

      本文标题:模板方法模式

      本文链接:https://www.haomeiwen.com/subject/itnovqtx.html