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

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

适配器模式实现方式

类适配器:使用多继承

对象适配器:使用组合

适配器模式中的角色

目标接口(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...

相关推荐
用户298698530145 分钟前
Python 一键导出 Excel 中的图表和形状为图片
后端·python·excel
汤米粥9 分钟前
Python爬虫——json解析
爬虫·python·json
武陵悭臾24 分钟前
Python应用开发学习:如何让随机数按一定比列出现
python·学习·random·概率·随机数
我登哥MVP36 分钟前
走进 Gang of Four 设计模式:外观模式
java·设计模式·外观模式
amongdata40 分钟前
MyVoiceTyping:面向中文语音输入的本地优先开源方案
python·开源·音视频·语音识别
薛定猫AI43 分钟前
【技术干货】大模型检查点可靠性评测:基于 Python 构建幻觉与指令遵循测试
开发语言·python
Mr__Miss1 小时前
Java 随机数生成器选型指南:Random、ThreadLocalRandom 与 SecureRandom
java·开发语言·python
CTA量化套保1 小时前
2026年下半年Python量化入门,先看API如何接进小流程
人工智能·python
薛定猫AI2 小时前
【深度解析】动态多智能体团队:并行规划、开发与验证的 Python 实战
大数据·开发语言·python
yaoxin52112313 小时前
462. Java 反射 - 获取声明类与封闭类
java·开发语言·python