【程序设计】Python的适配器模式

适配器模式定义如下:一个类的接口变换分类中翻译客户端的期待的另一种接口,使从而因原本不接口匹配而无法在一起工作的两个类能够在一起工作

适配器模式装饰状语从句:有模式的一定相似性,都起包装的作用

装饰模式的结果,是给一个对象增加了一些额外的职责,而适配器模式,则是将另一个对象进行了“



伪装 适配器可以认为是对现在业务的补偿式应用



尽量不要在设计阶段使用适配器模式,在两个系统需要兼容时可以考虑使用适配器模式



优点:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值