第三章:模板模式
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();方法中定义了过程实现,在子类中完成具体处理。
这样写的好处是,在父类中编写了流程算法,就无需再子类中重复去写。