模板方法模式是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. maven使用实例记录

    Maven入门指南① :Maven 快速入门及简单使用Maven入门指南② :Maven 常用命令,手动创建第一个 Maven 项目Maven入门指南③:坐标和依赖Maven入门指南④:仓库 Mave ...

  2. [转载] MySQL高可用方案选型参考

    原文: http://imysql.com/2015/09/14/solutions-of-mysql-ha.shtml?hmsr=toutiao.io&utm_medium=toutiao. ...

  3. 转载 uboot 命令

    1.bootm bootm [addr [arg ...]] - boot application image stored in memory passing arguments 'arg ...' ...

  4. php imagecreatetruecolor输出字符符或验证码

    $img = imagecreatetruecolor(100,100); //创建真彩图像资源 $color = imagecolorAllocate($img,200,200,200); //分配 ...

  5. Selenium Grid 运行报错 Exception thrown in Navigator.Start first time ->Error forwarding the new session Empty pool of VM for setup Capabilities

    Selenium Grid 运行报错 : Exception thrown in Navigator.Start first time ->Error forwarding the new se ...

  6. D3D的内存类型

    一.对D3D中AGP显存.内存.显存三种内存的解释 三种内存AGP内存(非本地显存),显存(本地内存),系统内存,其中我们都知道系统内存就是咱那内存条,那这AGP内存是个啥玩意啊?其实是因为在以前显卡 ...

  7. MySQL中基本的多表连接查询教程

    一.多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOIN ...

  8. IE6 IE7 hasLayout bug之li间的3px垂直间距

    1. li中仅包含a,span等内联(行内)元素2.触发条件: li元素的layout被触发(通常为设置了宽或高,设置overflow:hidden在IE7下同样触发layout),且a或span元素 ...

  9. 在excel单元格中提取信息

    平时在excel中处理数据的时候,肯定会遇到在单元格提取信息的情况,比如在地址中提取省.市.地区等,如果数据源内容规整的话,可以直接使用left().right().mid()等函数直接提取,但是大多 ...

  10. Java GC系列(2):Java垃圾回收是如何工作的?

    本文由 ImportNew - 伍翀 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 本教程是为了理解基本的Java垃圾回收以及它是如何 ...