Template Method 模式
1.定义:模板模式,也就是临摹的意思,父类中定义了模板,在子类中实现具体的处理.(活字印刷术)
2.示例程序
3.示例代码
AbstractDisplay.java
package TemplateMethod;
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次print()方法
}
close(); // 关闭
}
}
CharDisplay.java
package TemplateMethod;
public class CharDisplay extends AbstractDisplay {
private char ch; //构造方法接受要显示的字符
public CharDisplay(char ch) {
this.ch = ch;
}
public void open() {
System.out.print("<<"); //重写open()方法
}
public void print() {
System.out.print(ch); //重写print()方法
}
public void close() {
System.out.println(">>"); //重写close()方法
}
}
StringDisplay.java
package TemplateMethod;
public class StringDisplay extends AbstractDisplay {
private String string; // 需要显示的字符
private int width; // 以字节为单位计算出字符串长度
public StringDisplay(String string) {
this.string = string;
this.width = string.getBytes().length;
}
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("+");
}
}
Main.java
package TemplateMethod;
public class Main {
public static void main(String[] args) {
AbstractDisplay d1 = new CharDisplay('H');
AbstractDisplay d2 = new StringDisplay("Hello World");
AbstractDisplay d3 = new StringDisplay("你好 , 世界");
d1.display();
d2.display();
d3.display();
}
}
4.模板类角色
5.拓展思路