设计模式--模板模式

Posted bai3535

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--模板模式相关的知识,希望对你有一定的参考价值。

模板模式

介绍:是编程中经常用到的模式,它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。

核心:处理步骤父类中定义好,具体实现延迟到子类中定义

角色

1)抽象父类(AbstractClass):实现了模板方法,定义了算法的骨架。

2)具体类(ConcreteClass):实现抽象类中的抽象方法,即不同的对象的具体实现细节。

图示:技术图片

package com.offcn.designpattern.templateMethodpattern;

public class TemplateMethodDemo {
    public static void main(String[] args) {
        TemplateMethod t = new DrawMoney();
        t.process();
        System.out.println("=============================");
        TemplateMethod t2 = new CunMoney();
        t2.process();
    }
}
abstract class TemplateMethod{
    public void takeNumber(){
        System.out.println("取票排队");
    }
    public abstract void transact();
    public void evaluate(){
        System.out.println("反馈评分");
    }
    public final void process(){
        this.takeNumber();
        this.transact();
        this.evaluate();
    }
}
class DrawMoney extends TemplateMethod{

    @Override
    public void transact() {
        System.out.println("我要取款");
    }
}
class CunMoney extends TemplateMethod{

    @Override
    public void transact() {
        System.out.println("我要存钱");
    }
}

优点

1)它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展

2)它在父类中提取了公共的部分代码,便于代码复用。

3)部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。

缺点

1)对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。

2)父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。

使用场景

1)         数据库访问的封装

2)         Junit单元测试

3)         Servlet中关于doGet/doPost方法调用

4)         Hibernate中模板程序

5)         Spring中JDBCTemplate,HibernateTemplate等。

以上是关于设计模式--模板模式的主要内容,如果未能解决你的问题,请参考以下文章

是否有在单个活动中处理多个片段的 Android 设计模式?

尝试使用片段保存夜间模式状态

Spring针对事务处理提供哪两种事务编程模式。

设计模式模板方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式之模板方法模式代码示例

设计模式---- 模板方法模式