我打算把设计模式都总结起来,写成博客,这样以后复习总结或者需要更改的也更方便。
今天要聊的是:模板方式模式(Template method pattern)
模板方式的定义:
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以再不改变算法结构的情况下,重新定义算法中的某些步骤。
直接上代码:
class template:
def __init__(self):
pass
def logic(self):
print 'do something before ...'
print self.do_something_now()
print 'do something after ...'
def do_something_now(self):
return None
class apply_temp1(self):
def __init__(self):
pass
def do_something_now(self):
return 'go to study'
class apply_temp2(self):
def __init__(self):
pass
def do_something_now(self):
return 'go to play basketball'
if '__main__' == __name__:
obj1 = apply_temp1()
obj2 = apply_temp2()
obj1.logic()
obj2.logic()
do something before ....
go to study
do something after ....
do something before ....
go to play basketball
do something after ....
补充:hook方法在抽象类中的实现为空,是留给子类做一些可选的操作。如果某个子类需要一些特殊额外的操作,则可以实现hook方法,当然也可以完全不用理会,因为hook在抽象类中只是空方法而已。
总结:
(1)模板方式模式是基于继承的代码复用技术,模板方式模式的结构和用法也是面向对象设计的核心之一。在模板方式模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类当中。
(2)模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。
参考链接:
(1)http://blog.csdn.net/hguisu/article/details/7564039
(2)https://sourcemaking.com/design_patterns/template_method