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中关于日期时间处理的问答集锦
Mar 08 Python
Python查看多台服务器进程的脚本分享
Jun 11 Python
Python中的引用和拷贝浅析
Nov 22 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
python简单验证码识别的实现过程
Jun 20 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 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和ACCESS写聊天室(七)
2006/10/09 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
提高网站信任度的技巧
2008/10/17 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
MooTools 1.2介绍
2009/09/14 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
python 中if else 语句的作用及示例代码
2018/03/05 Python
HTML的form表单和django的form表单
2019/07/25 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
python interpolate插值实例
2020/07/06 Python
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
中专生自我鉴定范文
2013/12/19 职场文书
青年文明号服务承诺
2014/03/31 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
律师函格式范本
2015/05/27 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS
Win11查看设备管理器
2022/04/19 数码科技