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

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

###零、结构型模式


从现在开始就进入到了第二个模式大类结构型模式***。所谓结构型模式就是处理一个系统中不同实体(例如类和对象)之间的关系,关注的是通过一种简单的对象组合方式来创造新的功能*。

常见的结构型模式有:适配器模式、修饰器模式、外观模式、享元模式、模型-视图-控制器模式***和***代理模式


###一、适配器模式


什么是适配器模式

帮助我们实现两个不兼容的接口之间的兼容


###二、身边的例子


  • Iphone7/8/X/P

众所周知在Iphone6sp以及以前型号的Iphone手机所使用的而耳机是3.5毫米的耳机,但是如果在7以后的版本上就无法使用,所以各个商家看准了商机,生产了适配器,让3.5毫米的耳机也能在高版本手机上使用。

  • Traits

Traits是Python的第三方包,通过适配器将没实现的某个接口的对象转换成已经实现了的接口。


###三、什么情况下使用


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


###四、应用案例


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

external.py


class S

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()
目录
相关文章
|
SQL 安全 数据库
ctfshow-WEB-web6
ctf.show WEB模块第6关是一个SQL注入漏洞,注入点是单引号字符型注入,并且过滤了空格,我们可以使用括号()或者注释/**/绕过
391 0
ctfshow-WEB-web6
|
存储 边缘计算 人工智能
从中心走向边缘——深度解析云原生边缘计算落地痛点
云计算发展史,就是虚拟化技术的发展史。近 20 年来云计算与互联网相互促进高速发展,中心云技术成为全社会通用的基础设施。随着物联网、人工智能等技术的不断发展,尤其是产业互联网发展落地,中心云计算开始相形见绌,分散式边缘计算在当下被重新寄予厚望。如果中心云计算是由技术创新驱动的,那么边缘计算一定是业务价值驱动的。
1787 4
|
Linux 数据安全/隐私保护 Android开发
RISC-V ICE EVB 开发板 windows环境下烧写更新开发板镜像
ICE EVB 是基于 T-Head 自主研发的 C910 CPU 的 ICE 高性能 SoC 开发板。 本文介绍Windows环境下烧写ICE-EVB 开发板镜像,让用户快速上手。
1223 1
RISC-V ICE EVB 开发板 windows环境下烧写更新开发板镜像
|
编解码
Photoshop - 教您怎样对扫描文件去除底色?
Photoshop - 教您怎样对扫描文件去除底色?
1036 0
Photoshop - 教您怎样对扫描文件去除底色?
|
网络协议
如何简单、快速的计算IP子网
如何简单、快速的计算IP子网
635 0
如何简单、快速的计算IP子网
|
开发框架 运维 JavaScript
阿里云轻量应用服务器系统镜像核应用镜像有什么区别?
阿里云轻量服务器应用镜像和系统镜像有什么区别?系统镜像是初始操作系统,应用镜像是在原有的基础系统上另外安装了应用程序及程序所依赖的环境
827 0
阿里云轻量应用服务器系统镜像核应用镜像有什么区别?
|
Linux 开发工具 虚拟化
VMware 虚拟机 - 桥接模式下,虚拟网卡没有 ip
VMware 虚拟机 - 桥接模式下,虚拟网卡没有 ip
1037 0
VMware 虚拟机 - 桥接模式下,虚拟网卡没有 ip
|
机器学习/深度学习 传感器 人工智能
人工智能和物联网——5个新兴的应用案例
AI(人工智能)和IoT(物联网)的融合为全球企业释放了巨大的潜力。为了说明这一潜力,我们收集了5个新兴的人工智能物联网应用。
1648 2
人工智能和物联网——5个新兴的应用案例
|
自然语言处理 视频直播 人机交互
阿里云智能语音交互中实时识别服务的简单使用
智能语音交互产品基于语音识别、语音合成、自然语言理解等技术,实现“能听、会说、懂你”式的智能人机交互体验,适用于智能客服、质检、会议纪要、实时字幕等多个企业应用场景,实时识别服务对长时间的语音数据流进行识别,适用于会议演讲、视频直播等长时间不间断识别的场景,此篇文章将介绍此服务的简单使用
1641 0
阿里云智能语音交互中实时识别服务的简单使用
|
缓存 网络协议 Java
Linux网络知识
学习极客时间《Linux性能优化实战》网络部分常用部分记录。
1026 0
Linux网络知识