java设计模式之Template Method模式 ——将具体处理交给子类
2017-06-04 23:34
399 查看
1.Template Method模式:
在父类(抽象类)中定义处理流程的框架(父类的抽象方法),在子类中实现具体的处理(实现父类的抽象方法)。
2.示例程序
共4个类:
AbstractDisplay :定义非抽象普通方法display(); 定义抽象方法open(),print(),close()(由子类实现); 在display()中依次调用了open(),print(),close()这3个方法(即实现display());
CharDisplay:
继承AbstractDisplay ,实现AbstractDisplay 中的抽象方法open(),print(),close();
StringDisplay:
继承AbstractDisplay ,实现AbstractDisplay 中的抽象方法open(),print(),close();
Main:
用于测试程序行为;
类图
代码
AbstractDisplay.javapackage com.wang; 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();//循环调用5次 } close(); } }
CharDisplay .java
package com.wang; 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.println(">>"); } }
StringDisplay.java
package com.wang; public class StringDisplay extends AbstractDisplay { private int width; private String string; public StringDisplay(String string) { this.string = string; this.width = string.getBytes().length; } @Override public void open() { printLine(); } @Override public void print() { System.out.println("|" + string + "|"); } @Override public void close() { printLine(); } private void printLine() { System.out.print("+"); for (int i = 0; i < this.width; i++) { System.out.print("-"); } System.out.println("+"); } }
Main .java
package com.wang; public class Main { public static void main(String[] args) { //生成一个持有“H”的CharDisplay类实例 AbstractDisplay d1 = new CharDisplay('H'); //生成一个持有“Hello,world”StringDisplay类实例 AbstractDisplay d2 = new StringDisplay("hello,world"); //生成一个持有“你好,世界”的StringDisplay AbstractDisplay d3 = new StringDisplay("你好,世界."); d1.display(); d2.display(); d3.display(); } }
运行结果:
[b]敲黑板敲黑板[/b]
System.out.println();//最后的ln相当于/n,表示此句打印会换行。
System.out.print()则不换行打印。
抽象类作用:虽然抽象类不能生成实例看似无用,但实际上可以通过抽象方法的名字在抽象阶段里确定处理的流程,这一点也是非常重要的。
相关文章推荐
- Java设计模式(3)Template Method模式 将具体处理交给子类
- java设计模式---Template Method模板方法---实际处理交给子类
- 设计模式(三)-模版模式(Template Pattern)——将具体处理交给子类
- 设计模式C++模板方法模式-实际处理交给子类
- 设计模式回顾-Template模式(实际处理交给子类)
- java设计模式----模版模式+内部类+设计时间事件处理框架
- Java设计模式透析之 —— 模板方法(Template Method)
- JAVA设计模式之Template Method模式
- Henry手记—使用Template Method设计模式的.NET事件处理机制(一)
- Java设计模式透析之 —— 模板方法(Template Method)
- Java读书笔记12 事件处理基础 Observer设计模式
- JAVA设计模式 —模板设计模式(Template Method)
- Java设计模式-----Template Method模式
- java设计模式八:--Template Method(方法模版模式)
- Java设计模式透析之 —— 模板方法(Template Method)
- Java设计模式七:模板方法(Template Method)
- Henry手记—使用Template Method设计模式的.NET事件处理机制(二)
- JAVA设计模式之事务处理
- 浅谈设计模式在JAVA中的具体运用
- Java设计模式—模板方法(Template Method)