设计模式-模板方法模式
应用场景
在处理一些大致内容相同, 但是有些细微差距的问题时可以使用模板方法模式. 基于同一套模板下, 不同的具体实现只针对细节发生变化, 而其他的内容则是依照父类模板执行.
举例来说, 一个代驾司机的标准工作流程大致可分为:
- 接单
- 到达指定车主位置
- 代驾到指定目的地
- 收钱
- 要好评,再见~
那么区别在哪? 在于面对不同级别的车子时的心理状态~
顶级豪车得毕恭毕敬, 百万豪车是尊崇有加, 高端家用得谦卑有礼, 低档代步…
所以模板方法模式…精髓在于见人下菜碟, 典型的势利眼模式…
简单的python实现:
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
import abc
class SubstituteDriver(abc.ABC):
def take_order(self):
print("接到客户订单")
print("赶往指定地点")
self._inner_thought()
print("代驾到指定目的地")
print("收钱")
print("要好评, 再见~")
@abc.abstractmethod
def _inner_thought(self):
pass
class SubstituteDriverForAudi(SubstituteDriver):
def _inner_thought(self):
print("得多要钱")
class SubstituteDriverForAlto(SubstituteDriver):
def _inner_thought(self):
print("一脸嫌弃")
if __name__ == "__main__":
audi = SubstituteDriverForAudi()
audi.take_order()
alto = SubstituteDriverForAlto()
alto.take_order()
本质上来说, 模板方法模式不一定要基于抽象类, 而是将流程进行明确的划分, 让每一步流程都有自己独立的处理方法. 子类要做的则是继承模板类后, 根据实际情况重写父类的方法以满足自身需求即可.
本文由作者按照 CC BY 4.0 进行授权