广西百色建设局网站,免费的网站域名和空间,营销型企业网站的策划方案,网站平面设计内容#xff1a;定义一个操作中的算法的骨架#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法某特定步骤。 角色#xff1a; 抽象类#xff08;AbstractClass#xff09;#xff1a;定义抽象的原子操作#xff08;钩子… 内容定义一个操作中的算法的骨架而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法某特定步骤。 角色 抽象类AbstractClass定义抽象的原子操作钩子操作实现一个模板方法作为算法的骨架。具体类ConcreteClass实现原子操作 UML图 举个例子 需求一个运行窗口的指令用户可以自己定义细节运行指令让模板定死
from abc import ABCMeta,abstractmethod
from time import sleepclass Window(metaclassABCMeta):abstractmethoddef start(self):passabstractmethoddef repaint(self):passabstractmethoddef stop(self): # 原子操作/钩子操作passdef run(self): # 模板框架self.start()while True:try:self.repaint()sleep(1)except KeyboardInterrupt:breakself.stop()class MyWindow(Window):def __init__(self,msg):self.msgmsgdef start(self):print(窗口已经打开)def repaint(self):print(self.msg)def stop(self):print(窗口结束运行)MyWindow(Hello....).run()适用场景 一次性实现一个算法的不变的部分各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复控制子类扩展