设计模式之适配器模式
在使用适配器模式之前,需要先认识一下以下__dict__内置函数
- __dict__是什么有什么作用
- __dict__ 属性用于查看对象内部存储的所有属性名和属性值组成的字典
- __dict__如何使用
- 使用 __dict__ 属性既可查看对象的所有内部状态,也可通过字典语法来访问或修改指定属性的值,通常程序直接使用该属性即可
- __dict__使用场景
-
class Item: def __init__ (self, name, price): self.name = name self.price = price im = Item('鼠标', 28.9) print(im.__dict__) # ① # 通过__dict__访问name属性 print(im.__dict__['name']) # 通过__dict__访问price属性 print(im.__dict__['price']) im.__dict__['name'] = '键盘' im.__dict__['price'] = 32.8 print(im.name) # 键盘 print(im.price) # 32.8
# output
{'name': '鼠标', 'price': 28.9}
鼠标
28.9
键盘
32.8
-
适配器模式:
上面有三个类, 分别是教师,程序员,飞行员,分别有三个方法(工作):讲课,写代码,开飞机
如果需要统一的方式调用他们的方法(工作),可以实现一个适配器,适配器中对类对象的工作属性进行修改,使不同职业的人可以以相同的方式调用工作方法
代码实现:
# -*- coding:utf-8 -*- class Teacher(object): def __init__(self, name): self.name = name def prelection(self): print '{}老师正在讲课'.format(self.name) class Programmer(object): def __init__(self, name): self.name = name def write_code(self): print '程序员{}在写bug'.format(self.name) class Aviator(object): def __init__(self, name): self.name = name def fly_airplane(self): print '飞行员{}在开飞机'.format(self.name) class Adapter(object): def __init__(self, obj, adapted_methods): self.obj = obj # 修改属性 self.__dict__.update(adapted_methods) teacher = Teacher('张三') teacher = Adapter(teacher, dict(work=teacher.prelection)) teacher.work() programmer = Programmer('李四') programmer = Adapter(programmer, dict(work=programmer.write_code)) programmer.work() aviator = Aviator('王五') aviator = Adapter(aviator, dict(work=aviator.fly_airplane)) aviator.work() # output: 张三老师正在讲课 程序员李四在写bug 飞行员王五在开飞机
积一时之跬步,臻千里之遥程