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 相关文章推荐
基于Python实现的百度贴吧网络爬虫实例
Apr 17 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
python实现的文件同步服务器实例
Jun 02 Python
Python抓取淘宝下拉框关键词的方法
Jul 08 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
PyTorch中的Variable变量详解
Jan 07 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
Python新手如何理解循环加载模块
May 29 Python
python爬取抖音视频的实例分析
Jan 19 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
PHP+MySQL删除操作实例
2015/01/21 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
php实现读取内存顺序号
2015/03/29 PHP
jquery 注意事项与常用语法小结
2010/06/07 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
Python数据结构之Array用法实例
2014/10/09 Python
Python二分法搜索算法实例分析
2015/05/11 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
科室工作的个人自我评价
2013/10/30 职场文书
家居设计专业个人自荐信范文
2013/11/26 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
转正申请报告格式
2015/05/15 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
欧元符号 €
2022/02/17 杂记