设计模式之适配器模式和迭代器模式
1、适配器模式:
将一个类的接口转换为客户希望的另一个接口。适配器模式使得由于接口不兼容而不能一起工作的类可以一起工作。
在《大话设计模式》中对于适配器模式的介绍还是挺形象的,姚明刚到NBA,不会英语。他队友们如果要提醒队友防守会说“defense”,姚明要提醒队友防守要说“防守”,姚明和队友之间互相听不懂对方在说什么,这就导致了因为语言不兼容而导致的一起工作出现问题。现在拿出源代码:
class Spannoris(object):
#he is from Greece
def GAttack(self):
print 'yao,dsfsf'
class YM(object):
#he is from China
def CAttack(self):
print 'span,gongji'
class Adapter(object):
def __init__(self,obj,adapted_method):
self.obj = obj
self.__dict__.update(Attack=adapted_method)
def main():
ym = YM()
adapter1 = Adapter(ym,ym.CAttack)
adapter1.Attack()
sp = Spannoris()
adapter2 = Adapter(sp,sp.GAttack)
adapter2.Attack()
if __name__ == "__main__":
main()
2、迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
这种模式对于Python程序员来说一点都不陌生,因为Python内置了这种模式的实现的方式,即生成器,最著名的是yield。
当然我们可以自己写一个,就拿著名的斐波那契数列:
class Fib(object):
def __init__(self,n):
self.num = n
self.index = 0
self.a,self.b = 0, 1
def next(self):
if self.index < self.num:
self.a, self.b = self.b, self.a + self.b
self.index += 1
return self.b
raise StopIteration
def __iter__(self):
return self
f = Fib(4)
for i in f:
print i
有__iter__使得Fib变成可迭代对象。
--------EOF---------
微信分享/微信扫码阅读
微信分享/微信扫码阅读