Python设计模式-适配器模式

基于Python3.5.2,代码如下

#coding:utf-8class ACpnStaff:name = ""id = ""phone = ""def __init__(self,id):self.id = iddef getName(self):print("A protocol getName method ..id:%s"%self.id)return self.namedef setName(self,name):print("A protocol setName method ..id:%s" % self.id)self.name = namedef getPhone(self):print("A protocol getPhone method ..id:%s" % self.id)return self.phonedef setPhone(self,phone):print("A protocol setPhone method ..id:%s" % self.id)self.phone = phoneclass BCpnStaff:name = ""id = ""telephone = ""def __init__(self, id):self.id = iddef getName(self):print("B protocol getName method ..id:%s" % self.id)return self.namedef setName(self, name):print("B protocol setName method ..id:%s" % self.id)self.name = namedef getPhone(self):print("B protocol getPhone method ..id:%s" % self.id)return self.telephonedef setPhone(self, telephone):print("B protocol setPhone method ..id:%s" % self.id)self.telephone = telephoneclass CpnStaffAdapter:b_cpn = ""def __init__(self,id):self.b_cpn = BCpnStaff(id)def getName(self):return self.b_cpn.getName()def getPhone(self):return self.b_cpn.getPhone()def setName(self,name):self.b_cpn.setName(name)def setPhone(self,phone):self.b_cpn.setPhone(phone)if __name__ == "__main__":acpn_staff = ACpnStaff("123")acpn_staff.setPhone("wuzi")acpn_staff.setName("wuzi1")bcpn_staff = CpnStaffAdapter("456")bcpn_staff.setName("wuzib")bcpn_staff.setPhone("phoneb")

适配器模式分析与解读

适配器模式

将一个类的接口变换成客户端期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式和装饰模式有一定的相似性,都起包装的作用,但二者本质上又是不同的,装饰模式的结果,是给一个对象增加了一些额外的职责,而适配器模式,则是将另一个对象进行了“伪装”。两个类做的事情相,但具有不同的接口时要使用该模式,可以使客户端统一调用同一接口。适配器通常是对现在业务的补偿式应用,在设计阶段尽量不要用适配器模式。

适配器模式的适用场景

1、在不修改现有接口,同时也要使该接口适用或兼容新场景业务中,适合适用适配器模式。

解读

代码中,是实现在A公司中调用B公司的方法。由于A公司与B公司所采用的协议不同,需要对接口进行包装
1、在A公司中的员工信息,使用A公司的协议来实现信息插入,查询等,由ACpnStaff类来实现;
2、在B公司中的员工信息,使用B公司的协议来实现信息插入、查询等,由BCpnStaff类来实现;
3、在A公司中调用B的方法接口,通过CpnStaffAdapter类,在初始化的时候就创建一个B公司员工对象,在通过适配器类setName(),setPhone()等方法,直接调用B对象的对应方法,从而实现对B对象的操作。

程序运行结果如下:

A protocol setPhone method ..id:123
A protocol setName method ..id:123
B protocol setName method ..id:456
B protocol setPhone method ..id:456
通过运行结果,显示通过CpnStaffAdapter实例生成的对象,能够对B对象进行相应的读写操作。从而在不修改B的基础上完成,在A处调用B接口。

适配器模式的优缺点

优点:

1、适配器模式可以让两个接口不同,甚至关系不大的两个类一起运行;
2、提高了类的复用度,经过“伪装”的类,可以充当新的角色;
3、适配器可以灵活“拆卸”。

缺点:

1、适配器模式与原配接口相比,毕竟增加了一层调用关系,所以,在设计系统时,不要使用适配器模式。

备注

该模式要谨慎使用,模式的乱用不如不用,能够预见解决的就解决。

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

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

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

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

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

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

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

  4. 笔记:python设计模式

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 无需服务器的个人博客 (2018.5.22更新)
  2. NOIP2018退役记
  3. Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
  4. android 卡片3d效果_小米发布伸缩镜头技术:卡片机失业,多摄下岗?
  5. 添加别名_ssh别名免密登陆服务器
  6. go语言io reader_【已解决】go语言中如何使用io的MultiWriter
  7. 基于java的网上花店销售系统_基于web的花店销售系统的设计与实现
  8. 数据结构实验之栈二:一般算术表达式转换成后缀式
  9. java nio 消息_java nio消息半包、粘包解决方案
  10. cPanel附加域名出现Error from park wrapper: 使用带以下 IP 的命名服务器:
  11. Pandas——如何更改DataFrame中的值
  12. Hyperledger Fabric on SAP Cloud Platform
  13. java 传输 udp_java UDP传输
  14. 页面URL传递中文乱码
  15. png图片背景转换成透明
  16. flink的jar包和服务器的包冲突解决方案
  17. 不知足者常乐:SAP云在中国的落地
  18. chrome 安装插件(无需翻墙)
  19. flex布局HTML实例,Flex常见布局实例
  20. css百分比定位和百分比尺寸

热门文章

  1. 张一鸣卸任CEO,立下10年之约,期望突破线性延伸
  2. MathWorks的AI之路:面向工业场景,打通开发到部署的全链路
  3. 用 Python 详解《英雄联盟》游戏取胜的重要因素!
  4. 3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?
  5. 用最少的时间学最多的数据挖掘知识(附教程数据源)| CSDN博文精选
  6. 数据安全引担忧?get它,让你吃一颗“定心丸”
  7. 从0到1详解推荐系统中的嵌入方法,原理、算法到应用都讲明白了
  8. GraphSAGE:我寻思GCN也没我厉害!
  9. 加速电子化报销费控服务,易快报完成1500万美元B轮融资
  10. Alpha Go 之父恩师Tomaso Poggio:深度学习需要从炼金术走向化学