Java技术常用设计模式(三)--- 模板方法模式

1 模板方法模式概述

模板方法核心就是定义整体的逻辑,具体实现可由子类去实现;将一些不变的行为放到抽象类中,这样就能去除子类中不断重复代码的现象,提供了很好的代码复用的实现方式。

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

2 模板方法模式结构图

这里写图片描述

组成:
抽象模板(AbstractClass):定义了完整的框架来确定方法的调用顺序,但是仍然会定义一些抽象的方法给子类去实现。
具体模板实现类(ConcreteClass):实现抽象模板中定义的抽象方法。

3 模板方法模式的Java代码实现

定义一个逻辑的整体框架,如下面的代码中进入旅行社后travelAgencyProcess()定义的整个流程,流程中每个步骤的具体实现由子类去实现:
(1)抽象模板:AbstractTravelAgency.java

public abstract class AbstractTravelAgency {
    //具体的实现交由子类去实现,即每个人的选择是不一样的
    public abstract void login();
    public abstract void selectTravelWay();
    public abstract void travelStart();

    //定义进入旅行社后的整个流程:登记---选择出行方式---出发
    public void travelAgencyProcess(){
        login();
        selectTravelWay();
        travelStart();
    }
}

(2)具体模板实现子类:
ConcretePersonA .java


public class ConcretePersonA extends AbstractTravelAgency {

    @Override
    public void login() {
        System.out.println("我叫韩梅");
    }
    @Override
    public void selectTravelWay() {
        System.out.println("我选择坐灰机");
    }
    @Override
    public void travelStart() {
        System.out.println("准备好,飞机要出发了!");
    }

}

ConcretePersonB .java

public class ConcretePersonB extends AbstractTravelAgency {

    @Override
    public void login() {
        System.out.println("我叫李雷");
    }
    @Override
    public void selectTravelWay() {
        System.out.println("我选择坐高铁");
    }
    @Override
    public void travelStart() {
        System.out.println("坐稳了,老司机要发车了!");
    }
}

(4)测试类:

public class Main {

    public static void main(String[] args) {
        AbstractTravelAgency a = new ConcretePersonA();
        a.travelAgencyProcess();

        AbstractTravelAgency b = new ConcretePersonB();
        b.travelAgencyProcess();
    }
}

输出:
我叫韩梅
我选择坐灰机
准备好,飞机要出发了!
我叫李雷
我选择坐高铁
坐稳了,老司机要发车了!

4 Spring 中模板方法模式的实现

Java类库中常常会提取类库中的公共行为到抽象类中。
Spring MVC 中的View设计也同样使用的是模板设计模式。
这里写图片描述

如图,View只定义了接口方法,AbstractView类实现了在View中定义的所有方法,并留有一个抽象方法renderMergedOutputModel给子类去实现。而AbstractJasperReportsView 和 AbstractTemplateView 抽象类又进一步实现了AbstractView的抽象方法和renderMergedTemplateModel给子类去进一步实现。越往下面的子类需要实现的功能越少,整个模板已经建立,所以模板模式能加快整个程序的开发进度。


参考:
1)http://blog.csdn.net/jason0539/article/details/45037535
2)《深入分析Java Web》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值