设计模式之适配器模式(一)

设计模式之适配器模式(一)

适配器模式实现方式

类适配器:使用多继承

对象适配器:使用组合

适配器模式中的角色

目标接口(Target)

待适配的类(Adaptee)

适配器(Adapter)

适配器模式使用场景

想使用一个已经存在的类,而它的接口不符合你的要求

想使用一些已经存在的子类,但不可能对每一个都进行子类化以匹配它们的接口,对象适配器可以适配它的父类接口

适配器模式实例

(1) 类适配器,即使用多继承的实例
bash 复制代码
from abc import ABCMeta,abstractmethod

class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self,money):
        pass

class Alipay(Payment):
    def pay(self,money):
        print(f"pay {money} in alipay way...")

class WechatPay(Payment):
    def pay(self,money):
        print(f"pay {money} in wechat way...")


class BankPay(object):
    def cost(self,money):
        print(f"pay {money} in bankpay way...")

class NewBankPay(Payment,BankPay):
    def pay(self,money):
        self.cost(money)

if __name__=="__main__":
    p=Alipay()
    p.pay(100)
    p2 = NewBankPay()
    p2.pay(100)

执行结果如下:

pay 100 in alipay way...

pay 100 in bankpay way...

(2) 对象适配器,使用组合
bash 复制代码
from abc import ABCMeta,abstractmethod

class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self,money):
        pass

class Alipay(Payment):
    def pay(self,money):
        print(f"pay {money} in alipay way...")

class WechatPay(Payment):
    def pay(self,money):
        print(f"pay {money} in wechat way...")


class BankPay(object):
    def cost(self,money):
        print(f"pay {money} in bankpay way...")

class PaymentAdapter(Payment):
    def __init__(self,payment):
        self.payment=payment

    def pay(self,money):
        self.payment.cost(money)


if __name__=="__main__":
    p=Alipay()
    p.pay(100)
    p2 = PaymentAdapter(BankPay())
    p2.pay(100)

执行结果如下:

pay 100 in alipay way...

pay 100 in bankpay way...

相关推荐
小蕾Java13 小时前
Python详细安装教程(附PyCharm使用)
开发语言·python·pycharm
简小瑞13 小时前
VSCode源码解密:一行代码解决内存泄漏难题
前端·设计模式·visual studio code
Asort13 小时前
JavaScript设计模式(九)——装饰器模式 (Decorator)
前端·javascript·设计模式
rongqing201913 小时前
Google 智能体设计模式:模型上下文协议 (MCP)
设计模式
小小前端_我自坚强13 小时前
2025WebAssembly详解
前端·设计模式·前端框架
weixin_3077791313 小时前
使用AWS IAM和Python自动化权限策略分析与导出
开发语言·python·自动化·云计算·aws
笨手笨脚の13 小时前
设计模式-责任链模式
设计模式·责任链模式·行为型设计模式
惜月_treasure13 小时前
从零构建私域知识库问答机器人:Python 全栈实战(附完整源码)
开发语言·python·机器人
哈里谢顿14 小时前
threading模块学习
python
mit6.82415 小时前
[VoiceRAG] Azure | 使用`azd`部署应用 | Dockerfile
python