Python设计模式编程中Adapter适配器模式的使用实例


Posted in Python onMarch 02, 2016

将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
应用场景:希望复用一些现存的类,但是接口又与复用环境要求不一致。

模式特点:将一个类的接口转换成为客户希望的另外一个接口。

分类:类适配器(通过多重继承)、对象适配器。

来通过例子说明,下面是用户通过适配器使用一个类的方法

class Target:
 def Request():
  print "common request."

class Adaptee(Target):
 def SpecificRequest(self):
  print "specific request."

class Adapter(Target):
 def __init__(self,ada):
  self.adaptee = ada
 def Request(self):
  self.adaptee.SpecificRequest()

if __name__ == "__main__":
 adaptee = Adaptee()
 adapter = Adapter(adaptee)
 adapter.Request()

类图:

Python设计模式编程中Adapter适配器模式的使用实例

实例:
我们再来看一个简单的Adapter例子

#encoding=utf-8 
# 
#by panda 
#适配器模式 
 
 
def printInfo(info): 
 print unicode(info, 'utf-8').encode('gbk') 
 
#球员类 
class Player(): 
 name = '' 
 def __init__(self,name): 
  self.name = name 
  
 def Attack(self,name): 
  pass 
  
 def Defense(self): 
  pass 
  
#前锋 
class Forwards(Player): 
 def __init__(self,name): 
  Player.__init__(self,name) 
  
 def Attack(self): 
  printInfo("前锋%s 进攻" % self.name) 
  
 def Defense(self,name): 
  printInfo("前锋%s 防守" % self.name) 
 
#中锋(目标类) 
class Center(Player): 
 def __init__(self,name): 
  Player.__init__(self,name) 
  
 def Attack(self): 
  printInfo("中锋%s 进攻" % self.name) 
  
 def Defense(self): 
  printInfo("中锋%s 防守" % self.name) 
  
#后卫 
class Guards(Player): 
 def __init__(self,name): 
  Player.__init__(self,name) 
  
 def Attack(self): 
  printInfo("后卫%s 进攻" % self.name) 
  
 def Defense(self): 
  printInfo("后卫%s 防守" % self.name) 
  
#外籍中锋(待适配类) 
#中锋 
class ForeignCenter(Player): 
 name = '' 
 def __init__(self,name): 
  Player.__init__(self,name) 
  
 def ForeignAttack(self): 
  printInfo("外籍中锋%s 进攻" % self.name) 
  
 def ForeignDefense(self): 
  printInfo("外籍中锋%s 防守" % self.name) 
 
 
#翻译(适配类) 
class Translator(Player): 
 foreignCenter = None 
 def __init__(self,name): 
  self.foreignCenter = ForeignCenter(name) 
  
 def Attack(self): 
  self.foreignCenter.ForeignAttack() 
  
 def Defense(self): 
  self.foreignCenter.ForeignDefense() 
 
 
def clientUI(): 
 b = Forwards('巴蒂尔') 
 m = Guards('麦克格雷迪') 
 ym = Translator('姚明') 
  
 b.Attack() 
 m.Defense() 
 ym.Attack() 
 ym.Defense() 
 return 
 
if __name__ == '__main__': 
 clientUI();
Python 相关文章推荐
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
Python机器学习之K-Means聚类实现详解
Feb 22 Python
高效使用Python字典的清单
Apr 04 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
python多线程与多进程及其区别详解
Aug 08 Python
Python Django 前后端分离 API的方法
Aug 28 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
python实现文法左递归的消除方法
May 22 Python
Django通过json格式收集主机信息
May 29 Python
python实现语音常用度量方法的代码详解
May 25 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 #Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 #Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 #Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
Mar 02 #Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 #Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 #Python
探究python中open函数的使用
Mar 01 #Python
You might like
Protoss兵种介绍
2020/03/14 星际争霸
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
用PHP实现小型站点广告管理
2006/10/09 PHP
获取远程文件大小的php函数
2010/01/11 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
JS常见问题整理(持续更新)
2013/08/06 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
Python中一般处理中文的几种方法
2019/03/06 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
机械工程师的岗位职责
2013/11/17 职场文书
医院辞职信范文
2014/01/17 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
商场促销活动方案
2014/02/08 职场文书
数学国培研修感言
2014/02/13 职场文书
公司合作协议书范本
2014/04/18 职场文书
初一学生期末评语
2014/04/24 职场文书
军训个人总结
2015/03/03 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android