设计模式之适配器模式和迭代器模式

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---------
微信分享/微信扫码阅读