Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. #!/usr/bin/python
  2. #coding:utf8
  3. '''
  4. Adapter
  5. 比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。
  6. '''
  7.  
  8. import os
  9.  
  10.  
  11. class Dog(object):
  12. def __init__(self):
  13. self.name = "Dog"
  14.  
  15. def bark(self):
  16. return "woof!"
  17.  
  18.  
  19. class Cat(object):
  20. def __init__(self):
  21. self.name = "Cat"
  22.  
  23. def meow(self):
  24. return "meow!"
  25.  
  26.  
  27. class Human(object):
  28. def __init__(self):
  29. self.name = "Human"
  30.  
  31. def speak(self):
  32. return "'hello'"
  33.  
  34.  
  35. class Car(object):
  36. def __init__(self):
  37. self.name = "Car"
  38.  
  39. def make_noise(self, octane_level):
  40. return "vroom%s" % ("!" * octane_level)
  41.  
  42.  
  43. class Adapter(object):
  44. """
  45. Adapts an object by replacing methods.
  46. Usage:
  47. dog = Dog
  48. dog = Adapter(dog, dict(make_noise=dog.bark))
  49. """
  50. def __init__(self, obj, adapted_methods):
  51. """We set the adapted methods in the object's dict"""
  52. self.obj = obj
  53. self.__dict__.update(adapted_methods)
  54.  
  55. def __getattr__(self, attr):
  56. """All non-adapted calls are passed to the object"""
  57. return getattr(self.obj, attr)
  58.  
  59.  
  60. def main():
  61. objects = []
  62. dog = Dog()
  63. objects.append(Adapter(dog, dict(make_noise=dog.bark)))
  64. cat = Cat()
  65. objects.append(Adapter(cat, dict(make_noise=cat.meow)))
  66. human = Human()
  67. objects.append(Adapter(human, dict(make_noise=human.speak)))
  68. car = Car()
  69. car_noise = lambda: car.make_noise(3)
  70. objects.append(Adapter(car, dict(make_noise=car_noise)))
  71.  
  72. for obj in objects:
  73. print "A", obj.name, "goes", obj.make_noise()
  74.  
  75.  
  76. if __name__ == "__main__":
  77. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement