zoukankan      html  css  js  c++  java
  • 设计模式之适配器模式

    在使用适配器模式之前,需要先认识一下以下__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
       飞行员王五在开飞机

        

  • 相关阅读:
    如何保证service不被系统杀死
    查找算法
    java多线程学习
    设计模式-单例
    Python2.7-内置类型
    Python2.7-内置函数
    准备要学的东西
    Python-2.7 : 编码问题及encode与decode
    【JZOJ4637】大鱼海棠【博弈论】
    【JZOJ4637】大鱼海棠【博弈论】
  • 原文地址:https://www.cnblogs.com/wangbaojun/p/11326726.html
Copyright © 2011-2022 走看看