1、介绍
Template Method模式:在父类中定义处理流程的框架,在子类中实现具体处理的模式。
2、例子类图
3、代码例子
AbstractDisplay:抽象模板类
package me.jtzen9.template_method;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(); }}
CharDisplay:具体实现类
package me.jtzen9.template_method;public class CharDisplay extends AbstractDisplay { private char ch; public CharDisplay(char ch) { this.ch = ch; } @Override public void open() { System.out.println("<<"); } @Override public void print() { System.out.println(ch); } @Override public void close() { System.out.println(">>"); }}
StringDisplay:具体实现类
package me.jtzen9.template_method;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() { 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 < width; i++) { System.out.print("-"); } System.out.println("+"); }}
测试代码:
package me.jtzen9.template_method;public class Main { public static void main(String[] args) { AbstractDisplay d1 = new CharDisplay('H'); AbstractDisplay d2 = new StringDisplay("Hello,world."); d1.display(); d2.display(); }}
3、说明
摘至:【日】结城浩/著,杨文轩/译 .《图解设计模式》 北京:人民邮电出版社. 2017. 13~22