适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用场景:
1、已经存在的类的接口不符合我们的需求;
2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。
作用:不改变原有接口,实现新接口的功能
class Target(object):
def request(self):
print 'Target request' #目标期待转换成的类
class Adaptee(object):
def specialRequest(self):
print 'Adaptee specialRequest' #待转换的类
class Adpater(object):
def __init__(self, adpatee):
self.adpatee = adpatee
def request(self):
self.adpatee.specialRequest()
if __name__ == '__main__':
objects = []
a = Target()
b = Adaptee()
objects.append(a)
objects.append(Adpater(b)) #适配接口
for obj in objects:
obj.request() #调用相同接口
总而言之,适配器就是在不改变特殊功能类和普通类的前提下,让普通类能够匹配特殊功能类的接口。比如普通功能类的函数功能
为A,在导入适配器后,调用该函数的功能变为b
#!/usr/bin/env python
# encoding: utf-8
class phone(object):
def __init__(self):
print 'need 110V'
def charge(self,interface):
interface.offer_220()
class volt_110(object):
def __init__(self):
pass
def offer_110(self):
pass
class volt_220(object):
def __init__(self):
pass
def offer_220(self):
pass
class socket_110(volt_110):
def __init__(self):
pass
def offer_110(self):
print 'offer 110V'
class socket_220(volt_220):
def __init__(self):
pass
def offer_220(self):
print 'offer 220V'
class adapter(object):
def __init__(self,object):
self.volt = object.offer_220()
self.interface_110 = socket_110()
def offer_220(self):
self.interface_110.offer_110()
if __name__ == '__main__':
a = phone()
b = socket_220()
#b.offer_220()
c = adapter(b)
a.charge(c)
#a.charge(volt_110())
#a.charge(volt_220())
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用场景:
1、已经存在的类的接口不符合我们的需求;
2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。
作用:不改变原有接口,实现新接口的功能
class Target(object):
def request(self):
print 'Target request' #目标期待转换成的类
class Adaptee(object):
def specialRequest(self):
print 'Adaptee specialRequest' #待转换的类
class Adpater(object):
def __init__(self, adpatee):
self.adpatee = adpatee
def request(self):
self.adpatee.specialRequest()
if __name__ == '__main__':
objects = []
a = Target()
b = Adaptee()
objects.append(a)
objects.append(Adpater(b)) #适配接口
for obj in objects:
obj.request() #调用相同接口
总而言之,适配器就是在不改变特殊功能类和普通类的前提下,让普通类能够匹配特殊功能类的接口。比如普通功能类的函数功能
为A,在导入适配器后,调用该函数的功能变为b
#!/usr/bin/env python
# encoding: utf-8
class phone(object):
def __init__(self):
print 'need 110V'
def charge(self,interface):
interface.offer_220()
class volt_110(object):
def __init__(self):
pass
def offer_110(self):
pass
class volt_220(object):
def __init__(self):
pass
def offer_220(self):
pass
class socket_110(volt_110):
def __init__(self):
pass
def offer_110(self):
print 'offer 110V'
class socket_220(volt_220):
def __init__(self):
pass
def offer_220(self):
print 'offer 220V'
class adapter(object):
def __init__(self,object):
self.volt = object.offer_220()
self.interface_110 = socket_110()
def offer_220(self):
self.interface_110.offer_110()
if __name__ == '__main__':
a = phone()
b = socket_220()
#b.offer_220()
c = adapter(b)
a.charge(c)
#a.charge(volt_110())
#a.charge(volt_220())