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元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
python中append实例用法总结
Jul 30 Python
python 3.7.4 安装 opencv的教程
Oct 10 Python
python编写俄罗斯方块
Mar 13 Python
python的json包位置及用法总结
Jun 21 Python
Python识别验证码的实现示例
Sep 30 Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 Python
python包的导入方式总结
Mar 02 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将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
基于php缓存的详解
2013/05/15 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
javascript实现延时显示提示框效果
2017/06/01 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
python3 enum模块的应用实例详解
2019/08/12 Python
利用Python优雅的登录校园网
2020/10/21 Python
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
数控技术专业推荐信
2013/11/01 职场文书
一夜的工作教学反思
2014/02/08 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
大学入学感言
2015/08/01 职场文书
高三英语教学反思
2016/03/03 职场文书
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang
Python first-order-model实现让照片动起来
2022/06/25 Python