设计模式----适配器模式
Posted 幻觉czw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式----适配器模式相关的知识,希望对你有一定的参考价值。
#适配器模式
'''将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接
口不兼容而不能一起工作的那些类可以一起工作。'''
'''
适用场景:
1、已经存在的类的接口不符合我们的需求;
2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。
'''
#待适配类
class Assassin(object):
def __init__(self):
self.name = "Assassin"
self.weapon = "katana"
def assassinate(self):
return 'i will use my [%s] to attack!' \\
% self.weapon
class Guard(object):
def __init__(self):
self.name = "Guard"
self.weapon = "Sword"
def attack(self):
return 'i will use my [%s] to attack!' \\
% self.weapon
class Archer(object):
def __init__(self):
self.name = "Archer"
self.weapon = "Bow"
def shoot(self):
return 'i will use my [%s] to attack!' % \\
self.weapon
#适配器
class Adapter(object):
'''
Adapts an object by replacing methods.
Usage:
guard = Guard()
guard = Adapter(guard,dict(attack = guard.attack))
'''
def __init__(self,obj,adapted_methods): #更改和环境不一致的接口
self.obj = obj
self.__dict__.update(adapted_methods)
#如果适配器类对象没有此方法,那就调用__getattr__方法,
#在原待适配类对象中找这个方法或属性
def __getattr__(self,attr):
return getattr(self.obj,attr)
def main():
killers = []
assassin = Assassin()
killers.append(Adapter(assassin,dict(attack = assassin.assassinate)))
guard = Guard()
killers.append(Adapter(guard,dict(attack = guard.attack)))
archer = Archer()
killers.append(Adapter(archer,dict(attack = archer.shoot)))
for killer in killers :
print killer.name,'--->',killer.attack()
if __name__ == '__main__':
main()
以上是关于设计模式----适配器模式的主要内容,如果未能解决你的问题,请参考以下文章
尚硅谷设计模式学习 --- [类适配器模式对象适配器模式接口适配器模式]
设计模式 结构型模式 -- 适配器模式(概述类适配器模式对象适配器模式适配器模式适用场景JDK源码解析(I / O流))