第三章:模板模式

   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();方法中定义了过程实现,在子类中完成具体处理。

 这样写的好处是,在父类中编写了流程算法,就无需再子类中重复去写。

最新文章

  1. 备忘录模式(Memento Pattern)
  2. js校验输入字符串的字节长度
  3. CCNA第二章TCP/IP简介考试要点学习笔记
  4. [原创]cocos2dx加载网络图片&amp;异步加载图片
  5. 几种不同的获取url地址的方法
  6. Android中的IOC框架,完全注解方式就可以进行UI绑定和事件绑定
  7. Java知识点总结(不定时更新)
  8. 淘宝(阿里百川)手机客户端开发日记第九篇 Looper详解
  9. mariadb介绍
  10. ant 安装过程中问题记录
  11. SuperMapDeskTop中去除面图层边框
  12. hdoj 3746 Cyclic Nacklace【KMP求在结尾加上多少个字符可以使字符串至少有两次循环】
  13. Vijos P1680距离
  14. MAC地址格式小结
  15. iOS传值之通知传值(三)
  16. ecshop的详细安装步骤
  17. MySQL yum 在线与本地包方式安装
  18. 07-java学习-方法重载-idea集成开发工具学习-项目-模块-包
  19. 通过domoticz restful接口更新数据 c# 控制台程序
  20. oracle ITL(事务槽)的理解

热门文章

  1. DataBinding的用法
  2. java-IO各个区别
  3. ZooKeeper入门(三) ZooKeeper数据模型
  4. Codeforces Gym101518H:No Smoking, Please(最小割)
  5. HDU 1561:The more, The Better(有依赖的树型背包)
  6. Python 的8个关键要素
  7. C# 中的委托和事件本质讲解
  8. Java线程池源码及原理
  9. JavaSE核心知识
  10. Spring MVC源码(一) ----- 启动过程与组件初始化