模板方法模式是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. PHP基础知识之————PDO预处理语句

    转载处:http://www.cnblogs.com/xiaohuochai/p/6133353.html 定义 在生成网页时,许多PHP脚本通常都会执行除参数之外,其他部分完全相同的查询语句,针对这 ...

  2. html 如何获取表格中所选行的一行数据,并赋值到对应的TEXT里面?

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. SQL server数据类型、增删改查

    数据类型: 整数型:bigint.int.smallint.mediumint.tinyint 小数类型:decimal.numeric 浮点型:real.float.double 位型:bit 字符 ...

  4. poj3384Feng Shui(半平面交)

    链接 将边长向内推进r,明显这样把第一个圆的圆心放在新的边长是肯定是最优的,与原本边相切,然后再找新多边上的最远的两点即为两圆心. #include <iostream> #include ...

  5. jquery_dialog实现效果

    jquery_dialog实现效果 jquery_dialog.js <!-- /******************************************************** ...

  6. javascript------>(此文转发)

    JS控制div跳转到指定的位置的解决方案总结   总结一下自己在写这个需求遇到的问题,相信大家应该是经常遇到的.即要求滚轮滚动到指定的位置.先看下基本的解决方案. 1.给链接a加个#的方式来实现跳转. ...

  7. (三)主控板生级uboot与内核

    一.升级uboot 把我的电脑增加一个192.168.1.3的ip,方便升级boot. 1.连接串口,连接网口到GE1; 2.登陆电脑后到D:\MTG3000MAIN\first目录打开tftp32 ...

  8. UIImageView 的contentMode属性

    UIViewContentModeScaleToFill UIViewContentModeScaleAspectFit UIViewContentModeScaleAspectFill UIView ...

  9. Linux上安装Mysql后除了本机其他机器不能访问的问题(zhuan)

    http://blog.sina.com.cn/s/blog_a338027c0101esbs.html http://niutuku.com/tech/Mysql/237638.shtml http ...

  10. EI中国

    这里可以看到EI收录的所有的中国期刊:http://lib.sytu.edu.cn/files/zwwxx/2009-EI-china.htm