• 内容:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算的结构即可重定义该算法的某些特定步骤。
    • 角色:
      • 抽象类(AbstractClass):定义抽象的院子操作(钩子操作);实现一个模板方法作为算法的骨架
      • 具体类(ConreteClass):实现原子操作
    • 适用场景:
      • 一次性实现一个算法的不变的部门
      • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复
      • 控制子类扩展

    image.png

    1. from abc import ABCMeta, abstractmethod
    2. class IOHandler(metaclass=ABCMeta):
    3. @abstractmethod
    4. def open(self, name):
    5. pass
    6. @abstractmethod
    7. def deal(self, change):
    8. pass
    9. @abstractmethod
    10. def close(self):
    11. pass
    12. def process(self, name, change):
    13. self.open(name)
    14. self.deal(change)
    15. self.close()
    16. class FileHandler(IOHandler):
    17. def open(self, name):
    18. self.file = open(name,"w")
    19. def deal(self, change):
    20. self.file.write(change)
    21. def close(self):
    22. self.file.close()
    23. f = FileHandler()
    24. f.process("abc.txt", "Hello World")