zoukankan      html  css  js  c++  java
  • 第五天:结构型模式--适配器模式

    零、结构型模式

    从现在开始就进入到了第二个模式大类结构型模式。所谓结构型模式就是处理一个系统中不同实体(例如类和对象)之间的关系,关注的是通过一种简单的对象组合方式来创造新的功能
    常见的结构型模式有:适配器模式修饰器模式外观模式享元模式模型-视图-控制器模式代理模式

    一、适配器模式

    • 什么是适配器模式
      帮助我们实现两个不兼容的接口之间的兼容

    二、身边的例子

    • Iphone7/8/X/P
      众所周知在Iphone6sp以及以前型号的Iphone手机所使用的而耳机是3.5毫米的耳机,但是如果在7以后的版本上就无法使用,所以各个商家看准了商机,生产了适配器,让3.5毫米的耳机也能在高版本手机上使用。
    • Traits
      Traits是Python的第三方包,通过适配器将没实现的某个接口的对象转换成已经实现了的接口。

    三、什么情况下使用

    1. 存在一个老的系统,需要对老系统进行扩展,但又要不能改动老系统
    2. 扩展一个第三方系统的组建

    四、应用案例

    通过一个模拟操作计算机的例子来看看适配器模式怎么使用
    external.py

    class Synthesizer:
        def __init__(self, name):
            self.name = name
    
        def __str__(self):
            return "the {} synthesizer".format(self.name)
    
        def play(self):
            return 'is playing an electronic song'
    
    
    class Human:
        def __init__(self, name):
            self.name = name
    
        def __str__(self):
            return '{} the human'.format(self.name)
    
        def speak(self):
            return 'says hello'
    

    adapter.py

    from .external import Synthesizer, Human
    
    
    class Computer:
        def __init__(self, name):
            self.name = name
    
        def __str__(self):
            return 'the {} computer'.format(self.name)
    
        def execute(self):
            return 'executer a program'
    
    
    class Adapter:
        def __index__(self, obj, adapted_methods):
            self.obj = obj
            self.__dict__.update(adapted_methods)
    
        def __str__(self):
            return str(self.obj)
    
    
    def main():
        objects = [Computer('Asus')]
        synth = Synthesizer('moog')
        objects.append(Adapter(synth, dict(execute=synth.play)))
        human = Human('Bob')
        objects.append(Adapter(human, dict(execute=human.speak)))
        for i in objects:
            print('{} {}'.format(str(i), i.execute()))
    
    
    if __name__ == "__main__":
        main()
    
  • 相关阅读:
    一文让你快速入门pytest框架
    Python classmethod 修饰符
    python三种导入模块的方法
    18 | 眼前一亮:带你玩转GUI自动化的测试报告
    20193103《Python程序设计》实验二报告
    20193103陈柏维《Python程序设计》实验四报告
    20193103《Python程序设计》实验三报告
    20193103陈柏维《Python程序设计》实验一报告
    一种有效的编程思路
    一些希望实现的项目
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778252.html
Copyright © 2011-2022 走看看