模板是指在薄片塑料板上面写字后挖空,再使用毛笔或色笔涂满挖空部分,就能看到纯手工而以不失工整的字样,看到模板上的挖空形状,马上就知道最后会变出什么样子的字,不过实际上所显现出来的字样还是要依所使用的画笔种类而定.拿黑色签字笔当画笔,结果当然就是签字笔的字样;当用铅笔来画,得到的也只会是灰黑色的铅笔字;如果用五颜六色的彩色笔,自然能创出让人眼花的多色字.但是,无论使用哪种文具,制作出来的字样都还是脱不了模板上已经固定的形状。

下面我们用例子说明模板方法

1.模板类,相当于我们上面提到的薄片塑料板

Java代码
package com.pattern.templateMethod;  /** * 抽象类,充当模板角色 * @author administrator * */
public abstract class AbstractDisplay {  //由子类实现的抽象方法  public abstract void open();     public abstract void print();  public abstract void close();  //抽象类实现的方法,final可以保证在子类不会被修改  public final void display() {  open();   //先open...  for(int i=0; i < 5; i++) {  //反复输出5次  print();    }  close(); //输出完毕,close  }
}  2.字符类,输出单个字符
Java代码
package com.pattern.templateMethod;  public class CharDisplay extends AbstractDisplay {  private char ch;     //应输出的字符  public CharDisplay(char ch) {  //把构造函数传递过来的字符ch,存储在字段内  this.ch = ch;  }  public void open() {  System.out.print("<<");   //输出"<<"作为开始字符串  }  public void close() {  System.out.println(">>");  //输出 ">>"作为结束字符串  }  public void print() {  System.out.print(ch);    //输出存储在字段的字符  }  }  3.字符串类,输出字符串
Java代码
package com.pattern.templateMethod;  /** *  * @author administrator */
public class StringDisplay extends AbstractDisplay {  private String string;  //应输出的字符串  private int width;      //以byte为单位所求出的字符串的"长度"  public StringDisplay(String string) {  this.string =string;  width = string.getBytes().length;  }  public void open() {  //打印头装饰字符串  printLine();  }  public void print() { //打印内容  System.out.println("|"+string+"|");  }  public void close() { //打印尾装饰字符串  printLine();  }  public void printLine() {  System.out.print("+");  //输出"+"号表示边框位置  for(int i=0; i < width; ++i) {  System.out.print("-");  //当作线段  }  System.out.println("+");  //输出"+"号表示边框位置  }
}  4.测试类
Java代码
package com.pattern.templateMethod;  public class Main {  public static void main(String[] args) {  //建立1个有'A'的CharDisplay的对象  AbstractDisplay d1 = new CharDisplay('A');  //建立1个有"Hello world"的StringDisplay的对象  AbstractDisplay d2 = new StringDisplay("Hello World");  //d1,d2都是AbstractDisplay的子类对象,可以调用继承到的display()方法  d1.display();  d2.display();  }
}  输出:C代码  <<AAAAA>>
+-----------+
|Hello World|
|Hello World|
|Hello World|
|Hello World|
|Hello World|
+-----------+  

设计思想:作为模板的方法定义在父类(父类为抽象类),而方法定义使用抽象方法,实现抽象方法的是子类,要在子类实现方法,才能决定具体的操作。如果在不同的子类执行不同实现就可以发展出不同的处理内容。不过,无论在哪个子类执行任何一种实现,处理的大致流程都还是要依照父类制定的方式。

java设计模式---模板方法模式相关推荐

  1. Java设计模式-模板方法模式详解

    Java设计模式-模板方法模式 文章目录 Java设计模式-模板方法模式 0.前言 1.模板方法原理 2.模板方法模式中的角色 3.模板方法模式的UML类图 4.代码实现 5.编码测试 6.模板模式中 ...

  2. Java设计模式 - 模板方法模式

    Java设计模式 - 模板方法模式 定义一个算法的骨架,并将一些步骤通过子类表达. UML图示 要点 1. 定义一个算法的骨架 - 建立一个抽象类 2. 将一些步骤通过子类表达 - 子类继承抽象类 赋 ...

  3. JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

  4. Java设计模式——模板方法模式【Template Method Pattern】

    一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  5. Java设计模式—模板方法模式

    模板方法模式仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式. 1.定义:           一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该 ...

  6. 算法模板java_我的Java设计模式-模板方法模式

    近日,ofo小黄车宣布入驻法国巴黎,正式进入全球第20个国家,共享单车已然改变了我们的出行方式.就拿我自己来说,每当下班出地铁的第一件事,以光速锁定一辆共享单车,百米冲刺的速度抢在别人之前占领它. 而 ...

  7. JAVA设计模式--模板方法模式

    目录 一.什么是模板方法模式 二.模板方法模式的结构 三.模板方法模式相关知识点 四.模板方法模式的适用性 五.模板方法模式的优缺点 六.总结 一.什么是模板方法模式 模板方法(TemplateMet ...

  8. JAVA设计模式——模板方法模式(Template Method Pattern)

    概述 模板方法模式属于行为型模式.它由一个抽象类公开定义了执行它的方法的模板(执行的方式或顺序),它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.具体而言就是抽象类定义了某个方法的执 ...

  9. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

最新文章

  1. 数值分析第三次作业-常微分方程的数值解法
  2. [Noip模拟赛] Power
  3. CentOS 7 : Docker私有仓库搭建和使用
  4. 阿里忘禅:蚂蚁集团分布式注册中心建设分享
  5. docker容器不支持中文编码
  6. Mybatis Mapper自动注入警告的解决方案
  7. Python密码存储器
  8. Redux 入门 -- 处理 async action
  9. 【图像增强】基于matlab GUI暗通道+Retinex图像去雾(带面板)【含Matlab源码 732期】
  10. 美国服务器用于外贸建站有哪些好处
  11. Android简历模板
  12. CPN:Cascaded Pyramid Network for Multi-Person Pose Estimation_及CPN实现
  13. dw中css制作导航,四点告诉你Dreamweaver中制作漂亮导航条的方法
  14. 三星s8怎么分屏操作_一心三用 三星Galaxy Z Fold2 5G成多任务处理大师
  15. 调用微信接口上传图片总结
  16. 半年营收200亿,翻台率却降到3次/天,老板娘出逃海底捞怎么了?
  17. RuntimeError: stack expects each tensor to be equal size, but got xxx at entry 0 at entry 1
  18. Python微框架web.py初印象
  19. zk4元年拆解_耐克ZK5 Protro 科五复刻“减配”?可能你根本不懂曼巴心意!
  20. 产后修复治疗仪方案/案列/APP/网站

热门文章

  1. vuex 基本入门和使用(二)
  2. 微软技术透明中心落地北京,允许相关机构查看源代码
  3. 算法导论-MIT笔记
  4. XAMPP环境下配置Phalcon框架
  5. 转: 从微信的故障谈谈服务可用性
  6. CentOS下查看已经登录用户并踢出的方法
  7. JavaScript学习与实践(8)
  8. (十二)java版b2b2c社交电商spring cloud分布式微服务:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪...
  9. 云计算调查显示 希望与问题同在
  10. 发轫大数据 文思海辉荣获IBM“灯塔奖”