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. CSS3背景总结

    值 描述 CSS background-color 规定要使用的背景颜色. 1 background-position 规定背景图像的位置. 1 background-size 规定背景图片的尺寸. ...

  2. js 内存泄漏

    在javascript中,我们很少去关注内存的管理.我们创建变量,使用变量,浏览器关注这些底层的细节都显得很正常. 但是当应用程序变得越来越复杂并且ajax化之后,或者用户在一个页面停留过久,我们可能 ...

  3. Qt 中彩色图像转换为灰度图

    近期在做几个图像处理相关的项目.里面有一个操作就是须要先将彩色图像转换为灰度图像. QImage 有一个convertToFormat方法.最開始一直用这个函数来实现. 可是今天细致看了看,发现这个函 ...

  4. TCP状态图

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

  5. oozie调度hive脚本demo

    1. 环境配置 2. 脚本配置 3. 执行job 4. 查看结果 待发布 ..

  6. jvm 调整tomcat的堆内存和常驻内存catalina.sh

    4.2 性能优化 tomcat性能取决于你的内存大小 上策:优化代码 中策:jvm优化机制  垃圾回收机制 把不需要的内存回收   优化jvm--优化垃圾回收策略 优化catalina.sh配置文件. ...

  7. go hmac使用

    https://github.com/danharper/hmac-examples 94 func generateSign(data, key []byte) string { 95 mac := ...

  8. 原生sqlServer数据库连接

    package tj.test.demo; import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Sta ...

  9. ci 框架插入时返回插入的id号

    $this->db->insert('goods',$data); $gid=$this->db->insert_id('goods'); return $gid;

  10. html 处理

    近期做了一个后台管理网站,后台页面都是Html页面,里面再通过ajax访问后台服务.要做到比较好的用户体验,即:如果用户没有登录或没有权限马上调到登录页面,而不是等到页面加载后再ajax时判断是否登录 ...