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. dubbo异步调用三种方式

    异步通讯对于服务端响应时间较长的方法是必须的,能够有效地利用客户端的资源,在dubbo中,消费端<dubbp:method>通过 async="true"标识. < ...

  2. ASP.NET基础(一)

    ExecuteNonQuery()的用法 下面我们将详细讲解如何在Page_Load()中对数据库的增加.删除.修改,最后我们再来总结一下ExecuteNonQuery(),ExecuteScalar ...

  3. java中虚拟机命令:jstack使用方法

    Stack Trace for Java,用于生成虚拟机当前的线程快照信息,包含每一条线程的堆栈信息.该命令通常用于定位线程停顿原因,当出现线程停顿时,可通过stack查看每个线程的堆栈信息,进而分析 ...

  4. Hive入门笔记---1.Hive简单介绍

    1. Hive是什么 Hive是基于Hadoop的数据仓库解决方案.由于Hadoop本身在数据存储和计算方面有很好的可扩展性和高容错性,因此使用Hive构建的数据仓库也秉承了这些特性.这是来自官方的解 ...

  5. C语言 · 打印1~100间的质数(素数)

    算法提高 c++_ch02_04   时间限制:1.0s   内存限制:256.0MB      问题描述 输出1~100间的质数并显示出来.注意1不是质数. 输出格式 每行输出一个质数. 2 3 . ...

  6. LT和ET模式

    #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include &l ...

  7. PHP——数组和数据结构

    <body> <?php $arr[0]=5;//赋值定义 $arr[1]="aa"; print_r($arr); echo "<br /> ...

  8. Hadoop源码分析之读文件时NameNode和DataNode的处理过程

    转自: http://blog.csdn.net/workformywork/article/details/21783861 从NameNode节点获取数据块所在节点等信息 客户端在和数据节点建立流 ...

  9. Unity四元数和旋转

    四元数介绍 旋转,应该是三种坐标变换——缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转. ...

  10. printf 字体颜色打印

    为了给printf着色方便, 我们可以定义一些宏: view plain copy to clipboard print ? #define NONE          "/033[m&qu ...