二、16【设计模式】之模板方法模式

今天的博客主题

       设计模式 ——》 设计模式之模板方法模式


模板方法模式 TMP(Template Method Pattern)

 

定义

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

模板方法实际上是封装了一个固定流程,该流程由几个步骤组成,每个步骤有不同的子类实现,从而让固定的流程产生不同得结果。很简单,就是类的继承机制,也是应用很广泛的一个模式。

其本质就是抽象封装流程,进行具体实现。

 

应用场景

1)当客户端需要扩展算法的特定步骤,而不是整个算法或结构时。

2)当有几个类包含几乎相同的算法,只有一些细微的差异时。

3)

 

优点

1)覆盖大型复杂算法的其中一小部分,减少算法其他部分发生改变的影响。

2)抽取代码到超类,提高代码复用性。

3)将不同的代码分写到不同子类,通过对子类的扩展增加新的行为,提高代码的扩展性。

4)

 

缺点

1)类数目增加,每一个抽象类都需要一个子类来实现。

2)类数量的增加,间接增加了系统的复杂度。

3)继承关系的自身缺点,父类添加新的抽象方法,子类都要调整。

4)

 

源码中的应用

javax.servlet.http.HttpServlet
org.springframework.web.servlet.mvc.AbstractController 

 

代码示例

模板方法并不难,包含了两个角色

抽象模板(AbstractClass):抽象模板方法,定义一套算法框架或流程。

具体实现(SubClass):具体的子类实现,对算法框架或流程的某些步骤进行实现改变扩展。

// 抽象模板 定义算法骨架或流程
abstract class AbstractClass{
    public void operation(){
        System.out.println("必执行的算法或流程");
        templateMethod();
    }
    abstract protected void templateMethod();
}

// 具体子类实现
class SubClassA extends AbstractClass{
    @Override
    protected void templateMethod() {
        System.out.println("executed A ...");
    }
}
class SubClassB extends AbstractClass{
    @Override
    protected void templateMethod() {
        System.out.println("executed B ...");
    }
}

// 客户端调用
public class TemplateMethodPattern {

    public static void main(String[] args) {
        AbstractClass ac = new SubClassA();
        ac.operation();

        ac = new SubClassB();
        ac.operation();
    }
}

// 输出结果
必执行的算法或流程
executed A ...
必执行的算法或流程
executed B ...

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值