Template设计模式

  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调用了相同的方法,但执行了不同的方法体,这就是模板程序;

猜你喜欢

转载自www.cnblogs.com/xiaoyaomianbiren/p/12158522.html
今日推荐