Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式。当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的那样进行。

示例程序:

将一段字符串和字符循环显示五次的程序:

  • AbstractDisplay 父类抽象的模板,里面定义了处理流程,但是没有具体把实现写出来
package site.wangxin520.gof.template;

/**
* 模板模式的模板,使用的是抽象类和抽象方法。
* 在此模板中,定义一个模板的实现,以及需要子类去实现的抽象方法。
* 当子类实现抽象方法之后,便可以在本模板中固定的代码逻辑里面调用
* @author wangXgnaw
*
*/
public abstract class AbstractDisplay { /**
* 定义一些抽象方法,具体实现等子类进行
*/
protected abstract void open();
protected abstract void print();
protected abstract void close(); /**
* 定义模板执行的代码逻辑
* 将字符串和字符循环显示5次
*/
public final void display(){
open();
for (int i = 0; i < 5; i++) {
print();
}
close();
}
}
  • CharDisplay 子类实现了父类模板的抽象方法,处理字符
package site.wangxin520.gof.template;

/**
* 字符显示操作的子类,继承模板
* @author wangXgnaw
*
*/
public class CharDisplay extends AbstractDisplay{ private Character ch;
/**
* 构造函数
* @param ch 传入字符参数
*/
public CharDisplay(Character ch) {
this.ch=ch;
} /*
* 后面就是重写父类模板定义的抽象方法
* @see site.wangxin520.gof.template.AbstractDisplay#open()
*/
@Override
protected void open() {
System.out.print("(");
} @Override
protected void print() {
System.out.print(ch);
} @Override
protected void close() {
System.out.println(")");
} }
  • StringDisplay 子类实现了父类的模板抽象方法,处理字符串
package site.wangxin520.gof.template;

/**
* 字符串显示操作的模板子类,继承自模板
* @author wangXgnaw
*
*/
public class StringDisplay extends AbstractDisplay{ private String string; /**
* 构造函数,传入一个字符串
* @param string
*/
public StringDisplay(String string) {
this.string=string;
} /**
* 后面就是重写父类的抽象方法
*/
@Override
protected void open() {
System.out.println("+------------------------+");
} @Override
protected void print() {
System.out.println(string);
} @Override
protected void close() {
System.out.println("+------------------------+");
} }
  • TemplateTest 模板模式的测试类
package site.wangxin520.gof.template;

/**
* 模板模式的测试类
* @author wangXgnaw
*
*/
public class TemplateTest {
public static void main(String[] args) {
AbstractDisplay ad1=new CharDisplay('w');
ad1.display();
AbstractDisplay ad2=new StringDisplay("wangxin");
ad2.display();
}
}
  • 控制台显示:

设计模式之——Template模板模式的更多相关文章

  1. Template(模板)模式

    第三章:模板模式 Template模式比较简单,是基于继承关系的一种设计模式,由父类定义处理流程框架,由子类中实现具体处理. Code: package example.template; /*** ...

  2. Java设计模式之《模板模式》及使用场景

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9558825.html 模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框 ...

  3. 《JAVA设计模式》之模板模式(Template)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  4. Head First 设计模式系列之一----模板模式(java版)

    开篇序言:四人帮的设计模式对于我这个菜鸟看着打瞌睡,后面果断买了一本head first的,感觉还可以像看报纸似的,花了一个寒假的晚上看了大半,确实内容也挺吸引人的,讲的很风趣.否则我也不可能,大过年 ...

  5. 再起航,我的学习笔记之JavaScript设计模式30(简单模板模式)

    简单模板模式 概念介绍 简单模板模式(Simple template): 通过格式化字符串拼凑出视图避免创建视图时大量节点操作,优化内存开销. 创建模板 在实际的业务中如果我们需要进行前后台交互,或多 ...

  6. 设计模式のTemplatePattern(模板模式)----行为模式

    一.产生背景 在程序设计中,可能每个对象都有共同的地方,而此时如果每个对象定义一次,如下例子,每个对象都写Stay()方法,这样在每个类中都有很多相同的代码,此时,我们需要用到模板设计模式,来解决这个 ...

  7. 三、Template 模板模式

    需求:有规格的尺子,不管何种笔写,写出的字大小.形状都是一样的?抽象为处理流程一致,仅仅是不同的实现 代码清单: 抽象类: public abstract class AbstractDisplay{ ...

  8. 一天一个设计模式——模板方法(Template Method)模式

    一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜 ...

  9. 设计模式之Template Method模式

    作用:将具体的处理交给子类 什么是Template Method模式? Template Method模式是指带有模板功能的模式,组成模板的方法被定义在父类中,且这些方法为抽象方法.子类去实现父类中的 ...

随机推荐

  1. css 优先级的bug

    对于前端而言,了解css样式的优先级,对开发或处理bug有着事半功倍的效果,今天在做项目的时候,突然碰到一个优先级的小问题,刚开始不知道所因,后来才发现这个问题是由优先级造成的.先描述下问题,鼠标悬停 ...

  2. ng-class中的if else判断

    ng-class中的if else判断 来自于stackoverflow的一个问题,自己刚好用到,搬过来做个标记.原问题链接 在使用ng-class时,有些时候会碰到根据是否满足条件来设置元素的样式, ...

  3. lua工具库penlight--01简介

    lua的设计目标是嵌入式语言,所以和其它动态语言(如python.ruby)相比其自带的库缺少很多实用功能. 好在有lua社区有Penlight,为lua提供了许多强大的功能,接下来的几篇博客,我会简 ...

  4. Android——Activity和Intent及Activity的生命周期

    实验Activity的生命周期 package com.example.chenshuai.test; import android.app.Activity; import android.os.B ...

  5. RabbitMQ之主题(Topic)【译】

    在上一节中,我们改进了我们的日志系统,替换使用fanout exchange仅仅能广播消息,使得选择性的接收日志成为可能. 虽然使用direct exchange改进了我们的系统,但是它仍然由他的局限 ...

  6. 第二百五十七节,Tornado框架-路由映射,逻辑处理,文件归类配置

    Tornado框架-路由映射,逻辑处理,文件归类配置 Tornado框架 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起 ...

  7. 转载:Struts2支持断点续传下载实现

    转自:http://blog.sina.com.cn/s/blog_667ac0360102eckm.html package com.ipan.core.controller.web.result; ...

  8. Request获取具有相同 name 属性表单元素值

    html代码如: <input name="txtName" id="txtFirstName" type="text" /> ...

  9. maven+springmvc错误 JAX-RS (REST Web Services) 2.0 can not be installed

    项目problem提示错误 JAX-RS (REST Web Services) 2.0 can not be installed : One or more constraints have not ...

  10. Mac CEF 支持mp3 mp4编译

    1.下载:https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding   差不多15G 2.编译:https://bitbu ...