模版方法模式指定义一个模版框架,将一些具体行为放到子类取实现,模版方法使得子类可以不改变算法结构即可重新定义该算法的某些特定行为。
模版方法就是提供一个代码复用平台,有时候我们遇到一系列步骤需要执行,从更高层次看这个过程是相同的,只是有些具体步骤的实现可能不同,这时候就可以用模版方法。
例如每个公司员工的一天工作流程都是相似的,只是实际的工作内容不同,这时候就可以创建一个员工模版定义一天工作流程的框架,具体工作内容在子类实现。
① 员工基类
员工基类相当于一个员工模版,定义了一个员工的通用行为,例如打卡上班,午休,打卡下班等。
import abc
class Employee(metaclass=abc.ABCMeta):
def __init__(self, name):
self.name = name
def clock_in(self):
print(f"{self.name} 打卡上班")
@abc.abstractmethod
def work(self):
pass
def noon_break(self):
print(f"{self.name} 正在午休")
def clock_out(self):
print(f"{self.name} 打卡下班")
def daily_work(self):
self.clock_in()
self.work()
self.noon_break()
self.work()
self.clock_out()② 具体员工
具体员工继承员工基类,定义了属于自己的特定行为。
class Analyst(Employee):
def work(self):
print(f"{self.name} 正在分析行情...")
class Trader(Employee):
def work(self):
print(f"{self.name} 正在执行交易...")③ 员工开始自己的日常工作
Analyst('Chris').daily_work()
Trader('Ryan').daily_work()