java模式之-模板方法模式
模板方法模式是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模式之-模板方法模式的更多相关文章
- 折腾Java设计模式之模板方法模式
博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...
- Java设计模式之模板方法模式(Template)
前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象“来做调整”,针对这种拥有 ...
- Android设计模式之命令模式、策略模式、模板方法模式
命令模式是其它很多行为型模式的基础模式.策略模式是命令模式的一个特例,而策略模式又和模板方法模式都是算法替换的实现,只不过替换的方式不同.下面来谈谈这三个模式. 命令模式 将一个请求封装为一个对象,从 ...
- 简介Python设计模式中的代理模式与模板方法模式编程
简介Python设计模式中的代理模式与模板方法模式编程 这篇文章主要介绍了Python设计模式中的代理模式与模板方法模式编程,文中举了两个简单的代码片段来说明,需要的朋友可以参考下 代理模式 Prox ...
- Java进阶篇设计模式之十一 ---- 策略模式和模板方法模式
前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...
- Java设计模式之十一 ---- 策略模式和模板方法模式
前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...
- Java抽象类应用—模板方法模式
模板方法模式(Templete method) 定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤. 例: ...
- Java设计模式应用——模板方法模式
所谓模板方法模式,就是在一组方法结构一致,只有部分逻辑不一样时,使用抽象类制作一个逻辑模板,具体是实现类仅仅实现特殊逻辑就行了.类似科举制度八股文,文章结构相同,仅仅具体语句有差异,我们只需要按照八股 ...
- Java设计模式之模板方法模式(Template Method)
一.含义 定义一个算法中的操作框架,而将一些步骤延迟到子类中.使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤,不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现. 二 ...
随机推荐
- SAP FI/CO凭证不一致的解决办法
First, use program RKACOR20 to delete the incorrect CO documents. OKBA - Transfer FI Documents to CO ...
- [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署
原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498 ...
- 线程高级应用-心得7-java5线程并发库中阻塞队列Condition的应用及案例分析
1.阻塞队列知识点 阻塞队列重要的有以下几个方法,具体用法可以参考帮助文档:区别说的很清楚,第一个种方法不阻塞直接抛异常:第二种方法是boolean型的,阻塞返回flase:第三种方法直接阻塞. 2. ...
- [html] src与href的区别
src用于替换当前元素,href用于在当前文档和引用资源之间确立联系. src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置:在请求src资源时会将其指向的资源下 ...
- windows服务名称不是单个单词的如何启动?
比如要启动 Memcached Server: 命令行中输入命令要注意大小写,大小写要保持一致,正确的写法如下: net start "Memcached Server". ...
- commonJS — 数组操作(for Array)
for Array github: https://github.com/laixiangran/commonJS/blob/master/src/forArray.js 代码 /** * Creat ...
- OpenCV C++ 计算文件夹中对象文件数目及批量处理后保存到txt文件
//采用windows控制台实现计算文件夹中对象总数以及批量读取对象 //#include <afx.h> //和windows.h是一样的作用 #include <opencv2/ ...
- 《云中歌》孟石头泡妞大法独家放送,单身汪get起来!!
谁说古代文人雅士只会诗词歌赋.琴棋书画?作为“玉中之王”的公子哥——孟石头泡妞可是个中高手,总结起来都能出一本“泡妞宝典”了,单身的乃们还不赶紧学起来! 第一步:假装自来熟相识,马上开启约会模式 看到 ...
- EL表达式 (详解)(转)
EL表达式 1.EL简介 1)语法结构 ${expression} 2)[]与.运算符 EL 提供.和[]两种运算符来存取数据. 当要存取的属性名称中包含一 ...
- 日期操作类--GregorianCalendar类
GregorianCalendar--API JavaTM Platform Standard Ed. 6 GregorianCalendar类 Calendar类实现了公历日历,GregorianC ...