Template(模板)模式
第三章:模板模式
Template模式比较简单,是基于继承关系的一种设计模式,由父类定义处理流程框架,由子类中实现具体处理。
Code:
package example.template; /***
* 抽象类AbstractDisplay 其中抽象方法交给子类去实现
* @author Administrator
*
*/
public abstract class AbstractDisplay {
public abstract void open(); public abstract void print(); public abstract void close(); public final void display() {
open();
for (int i = 0; i < 5; i++) {
print();
}
close();
}
}
package example.template;
public class CharDisplay extends AbstractDisplay{
private char ch;
public CharDisplay(char ch) {
this.ch = ch;
}
@Override
public void open() {
System.out.print("<<");
}
@Override
public void print() {
System.out.print(ch);
}
@Override
public void close() {
System.out.print(">>");
}
}
package example.template;
public class StringDisplay extends AbstractDisplay{
private String string;
private int width;
public StringDisplay(String string) {
this.string = string;
this.width = string.getBytes().length;
}
@Override
public void open() {
printLength();
}
private void printLength() {
System.out.print("+");
for(int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
@Override
public void print() {
System.out.println("|"+string+"|");
}
@Override
public void close() {
printLength();
}
}
package example.template;
public class Main {
public static void main(String[] args) {
//在父类中定义处理流程,在子类中具体实现,就是Template(模板)模式
AbstractDisplay abstractDisplay = new CharDisplay('H');
AbstractDisplay abstractDisplay2 = new StringDisplay("HelloWworld");
abstractDisplay2.display();
abstractDisplay.display();
}
}
不用去关系打印的内容,在类AbstractDisplay中定义了三个抽象方法和一个final方法,在使用时可以使用多态,执行display();方法,在display();方法中定义了过程实现,在子类中完成具体处理。
这样写的好处是,在父类中编写了流程算法,就无需再子类中重复去写。
Template(模板)模式的更多相关文章
- 设计模式之——Template模板模式
Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的 ...
- 三、Template 模板模式
需求:有规格的尺子,不管何种笔写,写出的字大小.形状都是一样的?抽象为处理流程一致,仅仅是不同的实现 代码清单: 抽象类: public abstract class AbstractDisplay{ ...
- 跟我一起透彻理解template模板模式
#include <iostream> using namespace std; //template模式. class Base { public: void DealWhat() { ...
- Java设计模式之模板模式(Template )
前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板 ...
- 模板模式(Template)
行为型:Template(模板模式) 作为一个曾经爱好写文章,但是不太懂得写文章的人,我必须承认,开头是个比较难的起步. 模板模式常规定义:模板模式定义了一个算法步骤,把实现延迟到子类. 事实上模板模 ...
- Java设计模式(13)模板模式(Template模式)
Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: pu ...
- django基础2: 路由配置系统,URLconf的正则字符串参数,命名空间模式,View(视图),Request对象,Response对象,JsonResponse对象,Template模板系统
Django基础二 request request这个参数1. 封装了所有跟请求相关的数据,是一个对象 2. 目前我们学过1. request.method GET,POST ...2. reques ...
- 模板模式(Template Pattern)
模板模式(Template Pattern) -- 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. ...
- 《JAVA设计模式》之模板模式(Template)
在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...
随机推荐
- 面试中常见的算法之Java中的递归
1.方法定义中调用方法本身的现象2.递归注意实现 1) 要有出口,否则就是死递归 2) 次数不能太多,否则就内存溢出 3) 构造方法不能递归使用3.递归解决问题的思想和图解: 分解和合并[先分解后合并 ...
- JAVA UUID 生成唯一密钥(可随机选择长度)
/** * 获得指定数目的UUID * @param number int 需要获得的UUID数量 * @return String[] UUID数组 */ ...
- C# 6 新语法
1. using 声明的静态用法 2. 表达式体方法 3. 表达式体属性 4. 自动实现的属性初始化器 5. 只读的自动属性 6. nameof 运算符 7. 空值传播运算符 8. 字符串插值 9. ...
- 微信小程序 CSS border-radius元素 overflow:hidden失效问题 iPhone ios 苹果兼容问题 伪类元素
同事找我解决一个问题 说安卓圆角没问题 苹果上失效了 我一看 其实就是没做兼容上图给你们看看 有没有看出来 其实就是父级设置圆角属性失效 父元素使用border-radius和overflow:hid ...
- vue中ajax应用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android安卓书籍推荐《Android驱动开发与移植实战详解》下载
百度云下载地址:点我 Android凭借其开源性.优异的用户体验和极为方便的开发方式,赢得了广大用户和开发者的青睐,目前已经发展成为市场占有率很高的智能手机操作系统. <Android驱动开发与 ...
- 两个域名同时访问一个tomcat下的两个项目
两个域名,分别映射一个TOMCAT底下,两个应用. 分三个步骤完成. 1.域名与IP的解析,此步骤在万网等机构完成. 2.APACHE的httpd.conf的配置 <VirtualHost *: ...
- Mysql中varchar和char区别
一.varchar和char的区别: 区别一:定长和变长 char表示定长.长度固定,varchanr表示变长,即长度可变. 即char类型是规定多少字长则必须存储多少字长,超过的长度的字段则只能截取 ...
- 微信小程序开发--组件(4)
一.picker-view / picker-view-column <view> <view>{{year}}年{{month}}月{{day}}日</view> ...
- Java的Hook线程及捕获线程执行异常
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.f ...