适配器模式(Adapter Pattern)
In [1]:
class ACpnStaff(object):
name=""
id=""
phone=""
def __init__(self,id):
self.id=id
def getName(self):
print ("A protocol getName method...id:%s"%self.id)
return self.name
def setName(self,name):
print ("A protocol setName method...id:%s"%self.id)
self.name=name
def getPhone(self):
print ("A protocol getPhone method...id:%s"%self.id)
return self.phone
def setPhone(self,phone):
print ("A protocol setPhone method...id:%s"%self.id)
self.phone=phone
class BCpnStaff(object):
name=""
id=""
telephone=""
def __init__(self,id):
self.id=id
def get_name(self):
print ("B protocol get_name method...id:%s"%self.id)
return self.name
def set_name(self,name):
print ("B protocol set_name method...id:%s"%self.id)
self.name=name
def get_telephone(self):
print ("B protocol get_telephone method...id:%s"%self.id)
return self.telephone
def set_telephone(self,telephone):
print ("B protocol get_name method...id:%s"%self.id)
self.telephone=telephone
为在A公司平台复用B公司接口,直接调用B公司人员接口是个办法,但会对现在业务流程造成不确定的风险。为减少耦合,规避风险,我们需要一个帮手,就像是转换电器电压的适配器一样,这个帮手就是协议和接口转换的适配器。适配器构造如下:
In [2]:
class CpnStaffAdapter(object):
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)
适配器将B公司人员接口封装,而对外接口形式与A公司人员接口一致,达到用A公司人员接口访问B公司人员信息的效果。 业务示例如下:
In [3]:
acpn_staff=ACpnStaff("123")
acpn_staff.setName("X-A")
acpn_staff.setPhone("10012345678")
print ("A Staff Name:%s"%acpn_staff.getName())
print ("A Staff Phone:%s"%acpn_staff.getPhone())
bcpn_staff=CpnStaffAdapter("456")
bcpn_staff.setName("Y-B")
bcpn_staff.setPhone("99987654321")
print ("B Staff Name:%s"%bcpn_staff.getName())
print ("B Staff Phone:%s"%bcpn_staff.getPhone())