模板方法模式是java设计模式常见的模式之一。

《JAVA与模式》中写道:

模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

下面是自己写的小demo,便于理解模板方法模式。

1.父类

package com.westward;

public abstract class GoToCity {
/**
* 模板方法,必须定义为public final的。子类能够使用,但不能复写
* 子类都有相同的步骤,但是有些步骤有不同的实现。
* */
public final void go(){
closeDoor();
if (isLock()) {
getLock();
}
leaveHome();
onTheWay();
arrive();
} /**
* 不同子类不同的行为,将行为延迟到子类实现
* */
protected abstract void arrive(); /**
* 不同子类不同的行为,将行为延迟到子类实现
* */
protected abstract void onTheWay(); /**
* 共有的行为,在基类实现,并对子类隐藏
* */
private void leaveHome() {
System.out.println("离开家");
} /**
* 共有的行为,在基类实现,并对子类隐藏
* */
private void closeDoor() {
System.out.println("关闭家门");
} /**
* 共有的行为,在基类实现,并对子类隐藏
* 有些子类执行,有些不执行。所以用到了钩子方法
* */
private void getLock(){
System.out.println("上锁");
} /**
* 钩子方法,用来决定一些方法是否执行
* 子类可以复写此方法,来决定是否执行某方法
* */
protected boolean isLock(){
return true;
}
}

2 子类

package com.westward;

public class GoToBeijing extends GoToCity {

    @Override
protected void arrive() {
System.out.println("到达目的地:北京");
} @Override
protected void onTheWay() {
System.out.println("坐火车");
} }
package com.westward;

public class GoToShanghai extends GoToCity {

    @Override
protected void arrive() {
System.out.println("到达目的地:上海");
} @Override
protected void onTheWay() {
System.out.println("坐飞机");
} @Override
protected boolean isLock() { return false;
} }

测试类:我是采用的Junit4单元测试

package com.westward;

import static org.junit.Assert.*;

import org.junit.Test;

public class TemplateMethodTest {

    @Test
public void test() {
GoToCity go1= new GoToBeijing();
GoToCity go2= new GoToShanghai();
go1.go();
System.out.println("\n");
go2.go();
} }

output:

关闭家门
上锁
离开家
坐火车
到达目的地:北京

关闭家门
离开家
坐飞机
到达目的地:上海

java模式之-模板方法模式的更多相关文章

  1. 折腾Java设计模式之模板方法模式

    博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...

  2. Java设计模式之模板方法模式(Template)

    前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象“来做调整”,针对这种拥有 ...

  3. Android设计模式之命令模式、策略模式、模板方法模式

    命令模式是其它很多行为型模式的基础模式.策略模式是命令模式的一个特例,而策略模式又和模板方法模式都是算法替换的实现,只不过替换的方式不同.下面来谈谈这三个模式. 命令模式 将一个请求封装为一个对象,从 ...

  4. 简介Python设计模式中的代理模式与模板方法模式编程

    简介Python设计模式中的代理模式与模板方法模式编程 这篇文章主要介绍了Python设计模式中的代理模式与模板方法模式编程,文中举了两个简单的代码片段来说明,需要的朋友可以参考下 代理模式 Prox ...

  5. Java进阶篇设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  6. Java设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  7. Java抽象类应用—模板方法模式

    模板方法模式(Templete method) 定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤. 例: ...

  8. Java设计模式应用——模板方法模式

    所谓模板方法模式,就是在一组方法结构一致,只有部分逻辑不一样时,使用抽象类制作一个逻辑模板,具体是实现类仅仅实现特殊逻辑就行了.类似科举制度八股文,文章结构相同,仅仅具体语句有差异,我们只需要按照八股 ...

  9. Java设计模式之模板方法模式(Template Method)

    一.含义 定义一个算法中的操作框架,而将一些步骤延迟到子类中.使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤,不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现. 二 ...

随机推荐

  1. [转载] 根据多年经验整理的《互联网MySQL开发规范》

    原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋 ...

  2. linux学习笔记2-命令总结2

    权限管理命令  chmod 其他权限管理名  chgrp  chown  umask ========================================================= ...

  3. json与jsonp应用及其他ajax数据交互方式

    1.json是数据交换格式,使用实例如下: $.getJSON( '/manage/asset/asset_delByIds.action', { 'ids':id }, function(data) ...

  4. Data Deduplication in Windows Server 2012

    https://blogs.technet.microsoft.com/filecab/2012/05/20/introduction-to-data-deduplication-in-windows ...

  5. 【Linux日志】系统日志及分析

    Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息. 大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 / ...

  6. [转载]WEB缓存技术概述

    [原文地址]http://www.hbjjrb.com/Jishu/ASP/201110/319372.html 引言 WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户 ...

  7. 项目开发中遇到的extjs常见问题

    事件触发机制 l 给某一个控件添加事件. obj.addEvents( {search : true }); l 给某一个事件添加处理函数 n 给一个对象或变量添加监听及对应得处理,可以在创建时,通过 ...

  8. easyui 查询

    <fieldset> <legend>查询</legend> <table style="width: 100%;"> <tr ...

  9. 清除数据库中大于10W行的垃圾历史数据

    -- =============================================-- Author: <Author,Name,龙鸿轩>-- Create date: &l ...

  10. Sublime Text 3使用技巧

    工欲善其事必先利其器,用了很多编辑器,pycharm.Eclipse.notepad++.ultra edit等等,要么是太卡,要么是太简陋 论性感,论轻便,论功能,我选Sublime Text 参考 ...