Python - 设计模式 - Adapter Pattern
2011-04-27 21:39
323 查看
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议进行许可。允许非商业转载,但应注明作者及出处。
作者:liuyuan_jq
2011-04-27
http://ginstrom.com/scribbles/2008/11/06/generic-adapter-class-in-python/
作者:liuyuan_jq
2011-04-27
http://ginstrom.com/scribbles/2008/11/06/generic-adapter-class-in-python/
class Adapter(object): """ Adapts an object by replacing methods. Usage: dog = Dog dog = Adapter(dog, dict(make_noise=dog.bark)) """ def __init__(self, obj, adapted_methods): """We set the adapted methods in the object's dict""" self.obj = obj self.__dict__.update(adapted_methods) def __getattr__(self, attr): """All non-adapted calls are passed to the object""" return getattr(self.obj, attr)
完整实例
import os
class Dog(object):
def __init__(self):
self.name = "Dog"
def bark(self):
return "woof!"
class Cat(object):
def __init__(self):
self.name = "Cat"
def meow(self):
return "meow!"
class Human(object):
def __init__(self):
self.name = "Human"
def speak(self):
return "'hello'"
class Car(object):
def __init__(self):
self.name = "Car"
def make_noise(self, octane_level):
return "vroom%s" % ("!" * octane_level)
class Adapter(object): """ Adapts an object by replacing methods. Usage: dog = Dog dog = Adapter(dog, dict(make_noise=dog.bark)) """ def __init__(self, obj, adapted_methods): """We set the adapted methods in the object's dict""" self.obj = obj self.__dict__.update(adapted_methods) def __getattr__(self, attr): """All non-adapted calls are passed to the object""" return getattr(self.obj, attr)
def main():
objects = []
dog = Dog()
objects.append(Adapter(dog, dict(make_noise=dog.bark)))
cat = Cat()
objects.append(Adapter(cat, dict(make_noise=cat.meow)))
human = Human()
objects.append(Adapter(human, dict(make_noise=human.speak)))
car = Car()
car_noise = lambda : car.make_noise(3)
objects.append(Adapter(car, dict(make_noise=car_noise)))
for obj in objects:
print "A", obj.name, "goes", obj.make_noise()
if __name__ == "__main__":
main()
运行结果
A Dog goes woof! A Cat goes meow! A Human goes 'hello' A Car goes vroom!!!
相关文章推荐
- Python设计模式(8)-抽象工厂
- python 设计模式之观察者模式
- python设计模式实现 -- 观察者模式
- python单例设计模式
- Python设计模式-桥接模式
- <读书笔记> Thinking in python (Python 设计模式) 3. Proxy and State模式
- 设计模式(Python)-简单工厂,工厂方法和抽象工厂模式
- 分析Python中设计模式之Decorator装饰器模式的要点
- 举例分析Python中设计模式之外观模式的运用
- python设计模式(观察者模式)
- python设计模式——工厂方法
- Python Selenium设计模式-POM
- Python设计模式-备忘录模式
- 设计模式二(策略模式,采用python实现)
- [Python设计模式] 第21章 计划生育——单例模式
- 设计模式之单例模式——Python实现
- [Python设计模式] 第25章 联合国维护世界和平——中介者模式
- 23种设计模式之python实现--职责链模式
- 设计模式十一(桥接模式,python 语言实现)
- Head First 设计模式——策略模式(Strategy Pattern)——Python实现