网络编程
位置:首页>> 网络编程>> Python编程>> Python设计模式编程中Adapter适配器模式的使用实例

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

作者:五岳  发布时间:2023-11-16 10:02:15 

标签:Python,设计模式

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

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

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

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


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();
0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com