[1] [组件协作] ( 1 ) 模板方法 TemplateMethod

总结

  • 定义一个操作中的算法的骨架, 而将一些步骤 延迟 到子类中.
    模板方法使得子类可以不改变一个算法的结构也可重定义该算法的某些特定步骤.
    (为了支持子类在未来的变化)

  • 现代软件的分工特点是"框架与应用"的区分,组件协作模式,
    通过晚绑定,实现框架和应用的松耦合.

  • 有稳定的整体结构,
    但每个子步骤却有改变的需求,
    并且会在晚期实现需求.

  • 变化的地方写成虚函数

  • 必须有一个稳定的骨架,
    如果没有,那就不适合用template method模式.

  • Library对Application说:
    "不要调用我, 让我来调用你们."
    反向控制结构是面向对象和结构化程序的重要区分.




C++例子

image




python例子

class Window(metaclass=ABCMeta):
    abstractmethod
    def start(self):
        pass
    
    @abstractmethod
    def repaint(self):
        pass

    @abstractmethod
    def stop(self):
        pass

    def run(self): # 模板方法
        self.start()
        while True:
        try:
            self.repaint()
            sleep(1)
        except KeyboardInterrupt:
            break
        self.stop()


class Mywindow(Window):
    def __init__ (self, msg):
        self.msg = msg
    
    def start(self):
        print("窗口开始运行")
        
    def stop(self):
        print("窗口结束运行")

    def repaint(self):
        print(self.msg)

Mywindow( "Hello.. . ").run()
posted @ 2023-10-12 13:46  qwertzxc  阅读(3)  评论(0)    收藏  举报