设计模式之适配器模式

在使用适配器模式之前,需要先认识一下以下__dict__内置函数

  1. __dict__是什么有什么作用
    • __dict__ 属性用于查看对象内部存储的所有属性名和属性值组成的字典
  2. __dict__如何使用
    • 使用 __dict__ 属性既可查看对象的所有内部状态,也可通过字典语法来访问或修改指定属性的值,通常程序直接使用该属性即可
  3. __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
   飞行员王五在开飞机

    

原文地址:https://www.cnblogs.com/wangbaojun/p/11326726.html