Fork me on GitHub

模板方法模式

一、内容

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

二、角色

  • 抽象类:定义抽象的原子操作(钩子操作);实现一个模板方法的骨架
  • 具体类:实现原子操作

三、适用场景

  • 一次性实现一个算法的不变的部分
  • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复
  • 控制子类扩展

四、示例代码

from abc import ABCMeta, abstractmethod


class IOHandler(metaclass=ABCMeta):
    @abstractmethod
    def open(self, name):
        pass
    @abstractmethod
    def deal(self, change):
        pass
    @abstractmethod
    def close(self):
        pass

    def process(self, name, change):
        '''模板,就相当于是一个空盒子,可以往里面添加自己需要的功能。让这个函数去执行'''
        self.open(name)
        self.deal(change)
        self.close()


class FileHandler(IOHandler):
    def open(self, name):
        print('打开文件')

    def deal(self, change):
        print('操作文件')

    def close(self):
        print('关闭文件')

obj = FileHandler()
obj.process('abc.txt','')

 

posted on 2018-03-03 12:30  vmaze  阅读(99)  评论(0编辑  收藏  举报

导航