专栏首页喵叔's 专栏第五天:结构型模式--适配器模式

第五天:结构型模式--适配器模式

零、结构型模式

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

一、适配器模式

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

二、身边的例子

  • 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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第二天:创建型模式--抽象工厂模式

    一开始使用工厂方法,在后期需要许多工厂方法,将创建一系列对象的过程合并在一起形成抽象工厂。抽象工厂有一个优点,在使用工厂方法是从用户视角通常是看不到的,抽象工厂...

    喵叔
  • 第三天:创建型模式--建造者模式

    创建一个由多个部分构成的对象,而且它的构成需要一步接一步地完成,只有当各个部分都创建好后,这个对象才算创建完成。

    喵叔
  • 第四天:创建型模式--原型模式

    喵叔
  • 面向对象编程-类

    面向对象编程OOP (object-oriented programming)是最有效的软件编写方法之一,面向对象是利用“类”和“对象”来创建各种模拟来实现对真...

    用户1679793
  • python中的嵌套类

    在.NET和JAVA语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的,今天在python也看到了很不错支持一下。动态语言中很好的嵌套类的实现,应该说...

    py3study
  • python 实现装饰器设计模式

    python 装饰器简单、基本的实现并不复杂。装饰器(Decorators)模式类似于继承,当你需要为某一个对象添加额外的动作、行为时,在不改变类的情况下可以使...

    公众号 碧油鸡
  • python 实现装饰器设计模式

    python 装饰器简单、基本的实现并不复杂。装饰器(Decorators)模式类似于继承,当你需要为某一个对象添加额外的动作、行为时,在不改变类的情况下可以使...

    公众号 碧油鸡
  • 绕过安全设备的0day

    DNS域名系统是互联网关键的基础设施之一,它是一个将域名与IP地址互相映射的全球分布数据库。对于恶意DNS的过滤、检测恶意网站域名、僵尸网络和网络隐秘通道发现是...

    糖果
  • 绕过安全设备的0day

    DNS域名系统是互联网关键的基础设施之一,它是一个将域名与IP地址互相映射的全球分布数据库。对于恶意DNS的过滤、检测恶意网站域名、僵尸网络和网络隐秘通道发现是...

    洛米唯熊
  • python的面向对象编程

    面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。

    没有故事的陈师傅

扫码关注云+社区

领取腾讯云代金券