Template
在父类中定义处理流程的框架,在子类中实现具体处理
/**
* 抽象类
* 负责实现模版方法,声明在模版方法中所使用到的抽象方法
*/
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();
}
}
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(">>");
}
}
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("+");
}
}
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();
}
}
在抽象类中可以实现一部分方法,但在接口中是无法实现方法的,因此在TemplateMethod模式中,无法用接口代替抽象类