作用:将具体的处理交给子类

什么是Template Method模式?

Template Method模式是指带有模板功能的模式,组成模板的方法被定义在父类中,且这些方法为抽象方法。子类去实现父类中的抽象方法,即在子类种再进行对应的方法实现。

所以在父类中定义所需的框架,子类中去实现对应的方法,这就是Template Method模式。

UML类图:

总体框架:display种首先open方法,再调用5次print方法,再调用close方法(open、print、close均为抽象方法)

AbstractDisplay类:

  1. public abstract class AbstractDisplay
  2. {
  3. public abstract void open();
  4. public abstract void print();
  5. public abstract void close();
  6. public final void display()
  7. {
  8. open();
  9.  
  10. for(int i=0;i<5;++i)
  11. print();
  12.  
  13. close();
  14. }
  15. }

CharDisplay类:

  1. public class CharDisplay extends AbstractDisplay
  2. {
  3. private char ch;
  4. public CharDisplay(char ch)
  5. {
  6. this.ch = ch;
  7. }
  8.  
  9. public void open()
  10. {
  11. System.out.print("<<");
  12. }
  13.  
  14. public void print()
  15. {
  16. System.out.print(ch);
  17. }
  18.  
  19. public void close()
  20. {
  21. System.out.print(">>");
  22. }
  23. }

StringDisplay类:

  1. public class StringDisplay extends AbstractDisplay
  2. {
  3. private String string;
  4. privateint width;
  5. public StringDisplay(String string)
  6. {
  7. this.string = string;
  8. this.width = string.getBytes().length;
  9. }
  10.  
  11. public void open()
  12. {
  13. printLine();
  14. }
  15.  
  16. public void print()
  17. {
  18. System.out.print("|"+string+"|");
  19. }
  20.  
  21. public void close()
  22. {
  23. printLine();
  24. }
  25.  
  26. private void printLine()
  27. {
  28. System.out.print("+");
  29.  
  30. for(int i=0;i<width;++i)
  31. System.out.print("-");
  32.  
  33. System.out.println("+");
  34. }
  35. }

Main类:

  1. public class Main(String[] argvs)
  2. {
  3. AbstractDisplay d1 = new CharDisplay('H');
  4. AbstractDisplay d2 = new StringDisplay("Hello World");
  5.  
  6. d1.display();
  7. d2.display();
  8. }

作用:基类提供了实现的大体流程,但是每一步细节仍需要子类自行去实现

设计模式之Template Method模式的更多相关文章

  1. 一天一个设计模式——模板方法(Template Method)模式

    一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜 ...

  2. 【设计模式】Template Method模式

    OO基金会 封装 多态 继承 OO原则 封装变化 多用组合,少用继承 针对接口编程.不针对实现编程 为交互对象的松耦合设计而努力 类应该对扩展开放,对改动关闭 依赖抽象,不要依赖详细类 仅仅和朋友交谈 ...

  3. 设计模式:template method模式

    思想:在父类中定义处理流程的框架,在子类中实现具体的处理方法 优点:在父类中定义处理的算法,无需在每个子类中重复编写 继承关系图: 例子: //接口定义 class Parent { public: ...

  4. Template Method模式和Strategy模式有何异同

    Template Method模式和Strategy模式有何异同 博客分类: 设计模式 Java  Template Method模式很容易理解,就是由基类提供一个模板,将各子类中不变的行为提取到基类 ...

  5. 设计模式 Template Method模式 显示程序猿的一天

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 不断设计模式~ Template Method模式 老套路,看高清 ...

  6. 设计模式Template Method模式(Template Method)摘录

    23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例.怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还 ...

  7. 行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式

    1 模板方法(TEMPLATE METHOD)模式: 模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类.子 ...

  8. 设计模式(三)Template Method模式

    在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式即模板方法模式. 根据下面的示例程序理解模板方法模式. package BigJunOba.bjtu.Te ...

  9. Template Method模式和Strategy模式[继承与委托]

    继承 program by difference. 通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code. 过度使用继承的代价是巨大的.应使用组合或者委托来替代继承. Tem ...

随机推荐

  1. 【Python3爬虫】12306爬虫

    此次要实现的目标是登录12306网站和查看火车票信息. 具体步骤 一.登录 登录功能是通过使用selenium实现的,用到了超级鹰来识别验证码.没有超级鹰账号的先注册一个账号,充值一点题分,然后把下载 ...

  2. Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(一):Jenkins安装

    2019/1/31更新,经过我一段时间的使用 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用d ...

  3. RSA签名的PSS模式

    本文由云+社区发表 作者:mariolu 一.什么是PSS模式? 1.1.两种签名方式之一RSA-PSS PSS (Probabilistic Signature Scheme)私钥签名流程的一种填充 ...

  4. [五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的

      Launcher启动类 本文是双亲委派机制的源码分析部分,类加载机制中的双亲委派模型对于jvm的稳定运行是非常重要的 不过源码其实比较简单,接下来简单介绍一下   我们先从启动类说起 有一个Lau ...

  5. MySql 注意点

    每条操作语句的结束都要加:(遇到:就会执行操作) DELIMITER 其实本身相当 :当存储过程中包含:的时候,就需要用 DELIMITER 来区分 我们会经常看到 DELIMITER $$ 或者DE ...

  6. wpf 无缝滚动

    很早以前有项目就需要文字无缝滚动的效果但无奈当时技术不到位 人也比较懒惰(大概程序猿都是这个样子吧) 此方法并非只文字无缝其实任何内容都可以 <ScrollViewer Name="s ...

  7. Oracle 11g设置IP访问限制

    出于数据安全考虑,对Oracle数据库的IP做一些限制,只有固定的IP才能访问. 修改$ORACLE_HOME/network/ADMIN/sqlnet.ora文件 增加以下内容(红色表示注释): # ...

  8. vue HTTP 请求(vue-resource)

    来自:https://www.cnblogs.com/lhl66/p/8022423.html 侵删 //初始化页面需要做什么事情 //点击后需要做什么事情 //鼠标.键盘.冒泡.默认行为等事件 // ...

  9. IBGP默认的TTL值为255

    结论: 1.IBGP默认的TTL值为255 组网图: 抓包内容: 1.在AR1和AR2之间抓包,只显示BGP包,显示内容如下:

  10. (办公)SpringBoot与mybatisGenerator自动生成.

    20181206-自动生成,少写一点代码. (以下的内容主要参考csdn上的<[完美]SpringBoot+Mybatis-Generator自动生成>这篇文章,还有简书上的mbatis- ...