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)
一.含义 定义一个算法中的操作框架,而将一些步骤延迟到子类中.使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤,不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现. 二 ...
随机推荐
- 批量创建客户主数据函数SD_CUSTOMER_MAINTAIN_ALL
分享一下批创建客户主数据函数:SD_CUSTOMER_MAINTAIN_ALL TABLES:T077D,ZCITY,T005S,BNKA,ADRC,KNA1. DATA: TMP_KTOKD(4) ...
- aop前传之代理
一.jdk提供proxy类对目标对象实现代理,简单的说对方法的调用交给代理对象来操作. 代理目标 代理的具体实现: 代理测试; 简单说:利用proxy生成一个委托类实现代理.这个委托类是目标类的接口的 ...
- HDU4801·二阶魔方
题意:给定二阶魔方初始状态,问N(1 <= N <= 7)步旋转操作以内最多能使几个面相同. dfs搜索+剪枝. 魔方的每个旋转操作即对应于一个置换操作.又因为相对运动,上层左旋一次和下层 ...
- css+js实现兼容性select的样式
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- asp.net实现大文件上传
需要下载NeatUpload插件 上传页面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile ...
- Mac 实用工具与问题解决
1.在dock上方的一长溜,被我拖成个方块了 删掉里面的字符,然后按esc 即可! 2.FIT输入法(Fun Input Toy),是苹果操作系统OS X上的免费中文输入法,支持全拼/双拼/全双混拼, ...
- ajax请求成功或失败的参数
success:function(response, status, xhr){ }, error:function(xhr, errorText, errorType){ alert(errorTe ...
- 转:strcpy实现的考察要点
strcpy函数的实现 已知strcpy函数的原型是: char *strcpy(char *dst, const char *src); 实现strcpy函数 解释为什么要返回char * 假如考虑 ...
- 安卓App热补丁动态修复技术介绍
版权声明:本文由johncz原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/169 来源:腾云阁 https://www.q ...
- 【CITE】C#目录、文件、文件夹操作
1. 在一个目录下创建一个文件夹 if (!System.IO.Directory.Exists(path)) System.IO.Directory.CreateDirectory(path); ...