python设计模式-适配器模式
问题:假设有一个软件系统,你希望它能在不改变现有代码的前提下和一个新的厂商类库搭配使用,但是这个新厂商所设计出来的接口不同于旧厂商的接口 这个问题和下图的问题类似 美国标准的插头🔌无法在欧洲标准的插座上使用,通常的做法是什么呢? 添加一个插头适配器,适配器的作用是将欧式插头转换成美式插座,以便于让美式插头可以使用。 解决方案 所以,面对一个有全新接口的类库而又不能改变现有代码时,最先想到的做法是,在这两个系统之间添加一个适配器。 简单的例子 有一个系统,需要一个鸭子🦆对象,但是现在只有一个火鸡🦃对象。鸭子和火鸡对象的功能简单描述如下: # 鸭子的简单描述 class Duck: def quack(self): # 会呱呱叫 print("Quack") def fly(self): # 飞的能力 print("I'm flying") # 火鸡的简单描述 class Turkey: def gobble(self): # 不会呱呱叫,只会咯咯叫 print("Gobble gobble") def fly(self): # 飞的能力 但是飞不远 print("I'm flying a short distance") 因为现在没有鸭子对象,只能那火鸡对象冒充。由于鸭子对象和火鸡对象功能不同,不能直接拿来用,现在就需要使用适配器来完成这个功能: class TurkeyAdapter(Duck): turkey = Turkey() # 这里实际使用的是火鸡对象 # 实现鸭子对象拥有的quack方法 def quack(self): self.turkey.gobble() def fly(self): # 假设火鸡比鸭子飞的短,为了模拟鸭子的动作,多飞几次 for i in range(5): turkey.fly() 接下来调用就可以像使用鸭子对象一样使用火鸡适配后的对象。 ...