简介
Template Menthod即父类(抽象类)只定义规则(流程),具体实现交给子类。
例子
1.定义模板类(父类)AbstractDisplay
public abstract class AbstractDisplay {
//open()/print()/close()加给子类实现。
public abstract void open();
public abstract void print();
public abstract void close();
//display()不可被重写、覆盖(final修饰,即规则(流程))
public final void display() {
open();
for(int i= 0;i<5;i++) {
print();
}
close();
}
}
2.定义实现类(子类)
2.1.CharDisplay
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(">>");
}
}
2.2.StringDisplay
public class StringDisplay extends AbstractDisplay{
private String str;
private int width;
public StringDisplay(String str ) {
this.str = str ;
this.width = str.getBytes().length;
//this.width = str.length();
}
@Override
public void open() {
printLine();
}
@Override
public void print() {
System.out.println("|"+str+"|");
}
@Override
public void close() {
printLine();
}
private void printLine() {
System.out.print("+");
for(int i=0;i<width;i++) {
System.out.print("-");
}
System.out.println("+");
}
}
3.测试,定义Main类
public class Main {
public static void main(String[] args) {
//1号模板
AbstractDisplay d1 = new CharDisplay('H');
//2号模板
AbstractDisplay d2 = new StringDisplay("Hello World!");
AbstractDisplay d3 = new StringDisplay("你好 ,世界");
//调用父类display()方法,(父类定义规则(流程))
d1.display();
d2.display();
d3.display();
}
}
4.输出
<<HHHHH>>
+------------+
|Hello World!|
|Hello World!|
|Hello World!|
|Hello World!|
|Hello World!|
+------------+
+----------------+
|你好 ,世界|
|你好 ,世界|
|你好 ,世界|
|你好 ,世界|
|你好 ,世界|
+----------------+
----未完待续—