模板方法模式,就是先定义算法骨架(骨架设置为final方法,不能被改变),而将一下不走延迟到子类中。
也就是先定义模板,模板的具体内容由子类去实现,跟平时写论文等相似。
1. 模板方法类 AbstractDisplay
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();
}
}
2.子类实现CharDisplay
public class CharDisplay extends AbstractDisplay {
private char ch;
public CharDisplay(char ch) {
this.ch = ch;
}
public void open() {
System.out.print("<<");
}
public void print() {
System.out.print(ch);
}
public void close() {
System.out.println(">>");
}
}
3.子类实现StringDisplay
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();
}
public void print() {
System.out.println("|" + string + "|");
}
public void close() {
printLine();
}
private void printLine() {
System.out.print("+");
for (int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
}
4.主函数Main
public class Main {
public static void main(String[] args) {
AbstractDisplay d1 = new CharDisplay('H');
AbstractDisplay d2 = new StringDisplay("Hello, world.");
d1.display();
d2.display();
}
}
本文介绍了一种常用的设计模式——模板方法模式。通过定义算法的骨架,并将某些步骤延迟到子类实现的方式,使得子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤。文章通过具体的Java代码示例,展示了如何使用抽象类定义模板方法,并由子类来完成具体实现。

被折叠的 条评论
为什么被折叠?



