设计模式-模板模式

适配器模式

模板定义

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

类图

模板模式类图

AbstractClass(抽象类)

它不仅负责实现模板方法,还负责声明在模板方法中所使用到的抽象方法。这些抽象方法由子类ConcreteClass负责实现。

ConcreteClass(具体类)

它负责具体实现AbstractClass中定义的抽象方法。

示例

继承示例

类图

模板模式示例类图

AbstractDisplay

1
2
3
4
5
6
7
8
9
10
11
12
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();
}
}

CharDisplay

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class CharDisplay extends AbstractDisplay {

private char ch;

public CharDisplay(char c) {
this.ch = c;
}

@Override
public void open() {
System.out.println("<<");
}

@Override
public void print() {
System.out.println(ch);
}

@Override
public void close() {
System.out.println(">>");
}

}

StringDisplay

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class StringDisplay extends AbstractDisplay {

private String string;

private int width;

public StringDisplay(String string) {
this.string = string;
this.width = string.length();
}

@Override
public void open() {
printLine();
}

@Override
public void print() {
System.out.println("|" + string + "|");
}

@Override
public void close() {
printLine();
}

private void printLine() {
System.out.print("+");
for (int i = 0;i < width;i++) {
System.out.print("-");
}
System.out.println("+");
}

}

Main

1
2
3
4
5
6
7
8
9
10
public class Main {
public static void main(String[] args) {
AbstractDisplay d1 = new CharDisplay('c');
AbstractDisplay d2 = new StringDisplay("Hello world.");
AbstractDisplay d3 = new StringDisplay("你好,世界");
d1.display();
d2.display();
d3.display();
}
}
0%