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 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
Python显示进度条的方法
Sep 20 Python
Python编写屏幕截图程序方法
Feb 18 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Python读写ini文件的方法
May 28 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
python爬取各类文档方法归类汇总
Mar 22 Python
Python QQBot库的QQ聊天机器人
Jun 19 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 Python
Python3 合并二叉树的实现
Sep 30 Python
Python类的动态绑定实现原理
Mar 21 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和XSL stylesheets转换XML文档
2006/10/09 PHP
无数据库的详细域名查询程序PHP版(4)
2006/10/09 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
JS实现多选框的操作
2020/06/24 Javascript
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
python多线程扫描端口示例
2014/01/16 Python
Random 在 Python 中的使用方法
2018/08/09 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
python如何运行js语句
2020/09/09 Python
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
董事长秘书岗位职责
2013/11/29 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
听课评语大全
2014/04/30 职场文书
商务英语专业求职信
2014/06/26 职场文书
干部对照检查材料范文
2014/08/26 职场文书
走进毛泽东观后感
2015/06/04 职场文书
大学生受助感言
2015/08/01 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技