template英文名叫模板,在这个模式中,主要的角色有AbstractClass(抽象类)和ConcreteClass(具体类),这里举例如下;
将一段字符或者字符串循环显示5次;
首先定义抽象类,抽象类中,display方法就是模板,通过子类调用diaplay方法,就会按固定的方法去执行,而执行的具体方法定义在子类当中,代码如下:
1 package t2020010602; 2 3 public abstract class AbstractDisplay { 4 public abstract void open(); 5 6 public abstract void print(); 7 8 public abstract void close(); 9 10 public final void display() { 11 open(); 12 for (int i = 0; i < 5; i++) { 13 print(); 14 } 15 close(); 16 } 17 }
然后定义子类中的具体方法
1 package t2020010602; 2 3 public class CharDisplay extends AbstractDisplay { 4 private char ch; 5 6 public CharDisplay(char ch) { 7 this.ch = ch; 8 } 9 10 @Override 11 public void open() { 12 System.out.print("<<"); 13 } 14 15 @Override 16 public void print() { 17 System.out.print(ch); 18 } 19 20 @Override 21 public void close() { 22 System.out.println(">>"); 23 } 24 25 }
1 package t2020010602; 2 3 public class StringDisplay extends AbstractDisplay { 4 private String string; 5 6 private int length; 7 8 public StringDisplay(String string) { 9 this.string = string; 10 length = string.getBytes().length; 11 } 12 13 @Override 14 public void open() { 15 printLine(); 16 } 17 18 @Override 19 public void print() { 20 System.out.println("+" + string + "+"); 21 } 22 23 @Override 24 public void close() { 25 printLine(); 26 } 27 28 public void printLine() { 29 System.out.print("+"); 30 for (int i = 0; i < length; i++) { 31 System.out.print("-"); 32 } 33 System.out.println("+"); 34 } 35 36 }
程序入口如下
1 package t2020010602; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 AbstractDisplay d1 = new CharDisplay(‘H‘); 7 AbstractDisplay d2 = new StringDisplay("Hello world;"); 8 d1.display(); 9 d2.display(); 10 } 11 12 }
可以看到,d1与d2调用了相同的方法,但执行了不同的方法体,这就是模板程序;
原文:https://www.cnblogs.com/xiaoyaomianbiren/p/12158522.html