适配器模式定义如下:将一个类的接口变换分类中翻译客户端的期待的另一种接口,使从而因原本不接口匹配而无法在一起工作的两个类能够在一起工作
适配器模式装饰状语从句:有模式的一定相似性,都起包装的作用
装饰模式的结果,是给一个对象增加了一些额外的职责,而适配器模式,则是将另一个对象进行了“
伪装 ”。适配器可以认为是对现在业务的补偿式应用
尽量不要在设计阶段使用适配器模式,在两个系统需要兼容时可以考虑使用适配器模式。
优点:
1,适配器模式可以让两个接口不同,甚至关系不大的两个类一起运行;
2,提高了类的复用度,经过“伪装”的类,可以充当新的角色;
3,适配器可以灵活“拆卸”。
应用场景:
1,不修改现有接口,同时也要使该接口适用或兼容新场景业务中,适合使用适配器模式。例如,在一个嵌入式系统中,原本要将 据从闪存读入,现在需要将数据从磁盘读入,这种情况可以使用适配器模式,将从磁盘读入数据的接口进行“伪装”,以从闪存中读数据的接口形式,从磁盘读入数据。
缺点
适配器模式装饰状语从句:有模式的一定相似性,都起包装的作用
装饰模式的结果,是给一个对象增加了一些额外的职责,而适配器模式,则是将另一个对象进行了“
伪装 ”。适配器可以认为是对现在业务的补偿式应用
尽量不要在设计阶段使用适配器模式,在两个系统需要兼容时可以考虑使用适配器模式。
优点:
1,适配器模式可以让两个接口不同,甚至关系不大的两个类一起运行;
2,提高了类的复用度,经过“伪装”的类,可以充当新的角色;
3,适配器可以灵活“拆卸”。
应用场景:
1,不修改现有接口,同时也要使该接口适用或兼容新场景业务中,适合使用适配器模式。例如,在一个嵌入式系统中,原本要将 据从闪存读入,现在需要将数据从磁盘读入,这种情况可以使用适配器模式,将从磁盘读入数据的接口进行“伪装”,以从闪存中读数据的接口形式,从磁盘读入数据。
缺点
如图1所示,适配器模式与原配接口相比,毕竟增加了一层调用关系,所以,在设计系统时,不要使用适配器模式。
流程图:
Python的代码实现:
“””
适配器模式
“””
class ACpnStaff:
NAME = “”
ID = “”
phone=""
def __init__(self,id):
self.id=id
def getName(self):
print ("A 协议getName方法id:%s" % self.id)
return self.name
def setName(self,name):
print ("A 协议setName方法id:%s" % self.id)
self.name=name
def getPhone(self):
print ("A 协议getPhone方法id:%s" % self.id)
return self.phone
def setPhone(self,phone):
print ("A 协议setPhone方法id:%s" % self.id)
self.phone=phone
class BCpnStaff:
name=""
id=""
telephone=""
def __init__(self,id):
self.id=id
def get_name(self):
print ("B 协议get_name方法id:%s" % self.id)
return self.name
def set_name(self,name):
print ("B 协议setName方法id:%s" % self.id)
self.name=name
def get_telephone(self):
print ("B 协议get_telephone方法id:%s" % self.id)
return self.telephone
def set_telephone(self,telephone):
print ("B 协议get_name方法id:%s" % self.id)
self.telephone=telephone
# 适配器
class CpnStaffAdapter:
b_cpn=""
def __init__(self,id):
self.b_cpn=BCpnStaff(id)
def getName(self):
return self.b_cpn.get_name()
def getPhone(self):
return self.b_cpn.get_telephone()
def setName(self,name):
self.b_cpn.set_name(name)
def setPhone(self,phone):
self.b_cpn.set_telephone(phone)
if __name__=="__main__":
acpn_staff=ACpnStaff("123")
acpn_staff.setName("X-A")
acpn_staff.setPhone("10012345678")
print ("A 员工的名字:%s" % acpn_staff.getName ())
print ("A 工作人员电话:%s" % acpn_staff.getPhone ())
bcpn_staff = CpnStaffAdapter( “456”)
bcpn_staff.setName( “YB”)
bcpn_staff.setPhone( “99987654321”)
print(“B员工的名字:%s”%bcpn_staff.getName())
print(“B工作人员电话:%s”%bcpn_staff.getPhone())
原文:https ://yq.aliyun.com/articles/70536 ? spm = a2c4e.11153940.blogcont280715.15.175692aaXuwOAB