模板方法模式(未完成)

模板方法模式

  当使用了继承时,就要让父类成为模板,把重复的代码上升到父类,而不是再在子类中重复。为了完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常会考虑使用模板方法模式来处理。

  模板方法模式(Template Method),定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板方法模式结构图

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
36
37
38
39
40
41
42
43
44
45
46
47
48
//抽象模板
public abstract class AbstractClass {
//一些抽象行为,放到子类中实现
public abstract void primitiveOperation1();
public abstract void primitiveOperation2();

//模板方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,它们都推迟到子类实现
public void templateMethod(){
primitiveOperation1();
primitiveOperation2();
System.out.println("");;
}
}

//实现抽象模板
public class ConcreteClassA extends AbstractClass {
@Override
public void primitiveOperation1() {
System.out.println("具体类A方法1实现");
}

@Override
public void primitiveOperation2() {
System.out.println("具体类A方法2实现");
}
}

public class ConcreteClassB extends AbstractClass {
@Override
public void primitiveOperation1() {
System.out.println("具体类B方法1实现");
}

@Override
public void primitiveOperation2() {
System.out.println("具体类B方法2实现");
}
}

public class Main {
public static void main(String[] args) {
AbstractClass c;
c = new ConcreteClassA();
c.templateMethod();
c = new ConcreteClassB();
c.templateMethod();
}
}

  模板方法模式通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。模板方法模式就是提供了一个很好的代码复用平台。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。


参考:

🔗 《设计模式:可复用面向对象软件的基础》
🔗 《大话设计模式》