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

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

适配器模式实现方式

类适配器:使用多继承

对象适配器:使用组合

适配器模式中的角色

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

相关推荐
AIGC包拥它22 分钟前
RAG 项目实战进阶:基于 FastAPI + Vue3 前后端架构全面重构 LangChain 0.3 集成 Milvus 2.5 构建大模型智能应用
人工智能·python·重构·vue·fastapi·milvus·ai-native
闲人编程43 分钟前
Agent的评估体系(AgentEval):如何判断一个Agent好坏?
大数据·人工智能·python·算法·agent·智能体·swe
m0_702036531 小时前
html标签如何提升可访问性_aria-label与title区别【指南】
jvm·数据库·python
BU摆烂会噶1 小时前
【LangGraph】节点内调用与状态隔离
android·人工智能·python·ui·langchain·人机交互
ㄟ留恋さ寂寞1 小时前
Golang格式化输出占位符都有什么_Golang fmt占位符教程【通俗】
jvm·数据库·python
颖火虫盟主2 小时前
Hello World MCP Server 实现总结
java·前端·python
Gigavision2 小时前
rPPGMamba:面向 PURE-UBFC-MMPD 跨被试远程生理感知的 Mamba 时序建模方案
python·深度学习·rppg
海天一色y2 小时前
本地部署Qwen3-32B
python·ai
YuanDaima20482 小时前
贪心算法基础原理与题目说明
数据结构·人工智能·python·算法·贪心算法·手撕代码
程序员果子2 小时前
LangGraph :构建复杂有状态智能体的核心框架
人工智能·python·架构·langchain·prompt·ai编程·langgraph