设计模式——模版方法
* 抽象类 定义 抽象方法 和 模版方法(调用抽象方法,具体实现看子类重新的抽象方法)
* 子类实现抽象方法, 调用 模版方法
示例代码
- 定义一个抽象类,制定方法的处理流程,具体实现由子类完成。
public abstract class AbstractDisplay {
public abstract void open();
public abstract void printf();
public abstract void close();
/**
* 编写逻辑 实际处理交给子类
*/
public final void display() {
open();
for (int i = 0; i < 5; i++) {
printf();
}
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 printf() {
System.out.print(this.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() {
printfLine();
}
private void printfLine() {
System.out.print("+");
for (int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
@Override
public void printf() {
System.out.println("|" + this.string + "|");
}
@Override
public void close() {
printfLine();
}
}
主函数调用
public class TemplateMain {
/**
* 抽象类AbstractDisplay定义 抽象方法 和 模版方法(调用抽象方法,具体实现看子类重新的抽象方法)
* 子类实现抽象方法, 调用 模版方法。
*/
public static void main(String[] args) {
AbstractDisplay ad1 = new CharDisplay('A');
AbstractDisplay ad2 = new StringDisplay("hello");
AbstractDisplay ad3 = new StringDisplay("你好");
ad1.display();
ad2.display();
ad3.display();
}
}