设计模式五:适配器模式

什么是适配器模式

实现两个或以上不兼容接口之间的兼容

使用场景

某个产品已制造出来之后,需要应对新的需求,希望其仍然有效
不兼容接口是他方的或者是老旧的,无法访问其源码或者修改起来不切实际,并且违反开放/封闭原则。

放开/封闭原则:面向对象设计的基本原则之一,声明一个软件实体应该对扩展是开放的,对修改则是封闭的,意味着无需修改一个软件实体的源代码就能扩展其行为。

典型案例

在不同国家旅行,要为手机电脑充电,需要一个插头适配器,可以在不同国家使用

实例代码

class SQL:def __init__(self,name):self.name = namedef __str__(self):return 'the {} SQL'.format(self.name)def query(self):return 'query data : 123456789'class Serial:def __init__(self,name):self.name = namedef __str__(self):return 'the {} Serial'.format(self.name)def read(self):return 'read buff : abcdefghijklmn'class Internet:def __init__(self,name):self.name = namedef __str__(self):return 'the {} IP address'.format(self.name)def post(self):return 'post value : user = admin  password = 888888'class Adapter:def __init__(self,obj,adapted_methods):self.obj = obj#将特殊方法添加进适配器中self.__dict__.update(adapted_methods)def __str__(self):return str(self.obj)def main():communication = []sql = SQL('mysql')#由于用户只知道一个getdata方法,所以将各种不同方法适配到适配器中communication.append(Adapter(sql,dict(getdata = sql.query)))serial = Serial('RS485')communication.append(Adapter(serial,dict(getdata = serial.read)))internet = Internet('websocket')communication.append(Adapter(internet,dict(getdata = internet.post)))#模拟用户只调用getdata方法for i in communication:print('{} {}'.format(i,i.getdata()))if __name__ == "__main__":main()

Python设计模式:适配器模式相关推荐

  1. Python设计模式-适配器模式

    Python设计模式-适配器模式 基于Python3.5.2,代码如下 #coding:utf-8class ACpnStaff:name = ""id = "" ...

  2. python设计模式(九):外观模式

    # -*- coding:utf-8 -*- class API1: def Save(self):print('保存数据A') def Del(self):print('删除数据A') class ...

  3. 精通python设计模式-精通Python设计模式

    精通python设计模式2016年7月由人民邮电出版社出版发行,是一本学习Python设计模式方面的优秀指导教材.软件工程中,设计模式是指软件设计问题的推荐方案.设计模式一般是描述如何组织代码和使用最 ...

  4. python设计模式pdf_精通Python设计模式 高清晰PDF+源码

    精通Python设计模式讲述了16种基本设计模式,轻松解决软件设计常见问题:借力高效的Python语言,用现实例子展示各模式关键特性. 本书用实际生活中的例子带你了解常用的设计模式,介绍了诸多有关编写 ...

  5. 笔记:python设计模式

    文章目录 概述 什么是设计模式 为什么使用设计模式 python设计模式 1. 策略模式 2. 适配器模式 3. 工厂模式 4. 装饰器模式 5. 单例模式 小结 概述 整理网上python设计模式资 ...

  6. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  7. Python设计模式-建造者模式

    Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...

  8. Python设计模式-状态模式

    Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...

  9. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  10. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

最新文章

  1. 新手初学html日志 (一)
  2. 笔记本Wifi连接出现“设置与网络连接不匹配”的解决方法
  3. linux ftp dns,Ubuntu下FTP与DNS服务器搭建教程PDF
  4. SecureCRT连接Linux显示Mysql记录中文乱码
  5. 【Linux】linux内核学习
  6. 常见排序算法之快速排序
  7. 对外汉语偏误语料库_BCC语料库
  8. VBA 下载图片到word
  9. 小程序中点击二维码图片预览、长按转发、保存、识别图中二维码
  10. html字幕英文,小猪佩奇第1-4季中英文对照字幕(自制学习文本)
  11. 手机刷的面具是什么_小米9刷Magisk(面具)详细教程
  12. office2007在ppt中插入文件对象(可以单击打开)
  13. 郭盛华:警惕黑客通过共享充电宝入侵手机
  14. oracle12c密码登录失败,【译】解决Oracle12c Cloud Control登录验证出错问题
  15. 信号完整性分析系列2——什么是信号完整性及何时遇到
  16. 取得system权限
  17. 计算机学院学生工作办公室,上海交通大学-电子信息与电气工程学院-学生工作办公室...
  18. Matlab数据归一化和标准化函数
  19. 什么是管理能力,管理者的品格有哪些
  20. java post访问工具类(使用post方式请求http接口)

热门文章

  1. 设计模式(7) 续原型模式(2)
  2. 一个RSS阅读器的开源 ---- 邀请您加入开发队伍
  3. 最佳路径搜索(一):盲目搜索(深度优先,广度优先,深度限制,迭代加深)
  4. QT_布局管理器 网格布局管理器 QGridLayout 超简单
  5. Qt 应用程序图标设置
  6. JavaScript-Date类的getMonth方法释疑
  7. C++类头文件交叉引用出现error C2143: 语法错误: 缺少“
  8. 2017年二级计算机c真题语言,2017全国计算机二级C考试真题
  9. 软件工程学习之七大实际开发模型的讲解,及模块化设计的理念
  10. c/c++中一个 类似 a[2] 的数组引发的一些思考