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. WWDC 2014 Session笔记 - iOS界面开发的大一统

    本文是我的 WWDC 2014 笔记 中的一篇,涉及的 Session 有 What's New in Cocoa Touch Building Adaptive Apps with UIKit Wh ...

  2. UISCREEN 和支持高分辨率的显示屏

    UIScreen对象包含了整个屏幕的边界矩形.当构造应用的用户界面接口时,你应该使用该对象的属性来获得推荐的矩形大小,用以构造你的程序窗口. CGRect bound = [[UIScreen mai ...

  3. C#大小写字母转换函数

    ToUpper:小写转大写ToLower:大写转小写 例如: string A="aasiDi778=AA"; string B=""; B=A.ToUpper ...

  4. dp之多重背包poj2392

    题意:有k种石头,高为hi,在不超过ai的高度下,这种石头可以放置,有ci种这个石头,求这些石头所能放置的最高高度......... 思路:以往的什么硬币种数,最大硬币数之类的,他们的硬币都已经是排好 ...

  5. 2016 年 Java 优秀文章

    https://www.ibm.com/developerworks/cn/java/j-2016-java-good-article/index.html

  6. 简单实现Spring中BeanFactory原理

    上一篇文章介绍了Java反射机制在Spring IOC中的应用,知道了BeanFactory底层的实现原理. 原理搞懂了,对Spring IOC理解起来也很容易. 先来看看Java代码获取Spring ...

  7. TCP状态图

    TCP建立关闭连接状态图 MSL:Max segment lifetime最大段存活时间. MSL在RFC1122中规定为两分钟,但是各个操作系统的实现不同,在linux上一般配置MSL???? 处于 ...

  8. easyui datagrid columns 如何取得json 内嵌对象(many-to-one POJO class)

    http://www.iteye.com/problems/44119 http://hi.baidu.com/lapson_85/item/7733586e60b08500a1cf0f8d ———— ...

  9. 在J2EE的Web应用中,编译后的class文件存放的目录为(选择1项)

    在J2EE的Web应用中,编译后的class文件存放的目录为(选择1项) A. classes目录 B. images目录 C. jar目录 D. 任意位置 解答:A

  10. UDP也需要现有Server端,然后再有Client端

    UDP编程: DatagramSocket(邮递员):对应数据报的Socket概念,不需要创建两个socket,不可使用输入输出流. DatagramPacket(信件):数据包,是UDP下进行传输数 ...