设计模式(python实现)--模板模式(Template)

2020-02-02  本文已影响0人  远行_2a22

Template Method

动机(Motivation)

模式定义

定义一个操作中的算法的骨架 (稳定) ,而将一些步骤延迟 (变化) 到子类中。
Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的
某些特定步骤。
——《 设计模式》 GoF

要点总结

例子

一般实现

# -*- coding:utf-8 -*-


class Library(object):
    # 框架开发者
    def step1(self):
        print('step1')

    def step3(self):
        print('step3')

    def step5(self):
        print('step5')


class Application(object):
    # 应用开发者
    def step2(self):
        print('step2')
        return True

    def step4(self):
        print('step4')

def run_app():
    lib = Library()
    app = Application()

    lib.step1()
    if app.step2():
        lib.step3()

    for i in range(3):
        app.step4()

    lib.step5()

if __name__ == '__main__':
    run_app()

模板模式

# -*- coding:utf-8 -*-


class Library(object):
    # 框架开发者
    def step1(self):
        print('step1')

    def step3(self):
        print('step3')

    def step5(self):
        print('step5')

    def run_app(self):

        self.step1()
        if self.step2():
            self.step3()

        for i in range(3):
            self.step4()

        self.step5()

    def step2(self):
        # 需要子类重写
        pass

    def step4(self):
        # 需要子类重写
        pass


class Application(Library):
    # 应用开发者
    def step2(self):
        print('step2')
        return True

    def step4(self):
        print('step4')


class Application2(Library):
    # 应用开发者
    def step2(self):
        print('Application2 step2')
        return False

    def step4(self):
        print('Application2 step4')


if __name__ == '__main__':
    app = Application()
    app.run_app()

    print('-'*10)
    app2 = Application2()
    app2.run_app()

上一篇下一篇

猜你喜欢

热点阅读