Python设计模式:适配器模式

设计模式五:适配器模式

什么是适配器模式

实现两个或以上不兼容接口之间的兼容

使用场景

某个产品已制造出来之后,需要应对新的需求,希望其仍然有效
不兼容接口是他方的或者是老旧的,无法访问其源码或者修改起来不切实际,并且违反开放/封闭原则。

放开/封闭原则:面向对象设计的基本原则之一,声明一个软件实体应该对扩展是开放的,对修改则是封闭的,意味着无需修改一个软件实体的源代码就能扩展其行为。

典型案例

在不同国家旅行,要为手机电脑充电,需要一个插头适配器,可以在不同国家使用

实例代码

class SQL:
    def __init__(self,name):
        self.name = name

    def __str__(self):
        return 'the {} SQL'.format(self.name)

    def query(self):
        return 'query data : 123456789'

class Serial:
    def __init__(self,name):
        self.name = name
    
    def __str__(self):
        return 'the {} Serial'.format(self.name)

    def read(self):
        return 'read buff : abcdefghijklmn'

class Internet:

    def __init__(self,name):
        self.name = name
    
    def __str__(self):
        return 'the {} IP address'.format(self.name)

    def post(self):
        return 'post value : user = admin  password = 888888'

class Adapter:
    def __init__(self,obj,adapted_methods):
        self.obj = obj
        #将特殊方法添加进适配器中
        self.__dict__.update(adapted_methods)
    def __str__(self):
        return str(self.obj)

def main():
    communication = []
    sql = SQL('mysql')
    #由于用户只知道一个getdata方法,所以将各种不同方法适配到适配器中
    communication.append(Adapter(sql,dict(getdata = sql.query)))
    serial = Serial('RS485')
    communication.append(Adapter(serial,dict(getdata = serial.read)))
    internet = Internet('websocket')
    communication.append(Adapter(internet,dict(getdata = internet.post)))
    #模拟用户只调用getdata方法
    for i in communication:
        print('{} {}'.format(i,i.getdata()))

if __name__ == "__main__":
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值