Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- #coding:utf8
- '''
- Adapter
- 比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。
- '''
- 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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement