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

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

适配器模式实现方式

类适配器:使用多继承

对象适配器:使用组合

适配器模式中的角色

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

相关推荐
Dr.Kun10 分钟前
【鲲码园Python】基于pytorch的鸟品种分类系统(25类)
pytorch·python·分类
是有头发的程序猿30 分钟前
Python爬虫实战:面向对象编程在淘宝商品数据抓取中的应用
开发语言·爬虫·python
萑澈44 分钟前
Windows系统Anaconda/Miniconda的安装、配置、基础使用、清理缓存空间和Pycharm/VSCode配置指南
python
Onebound_Ed1 小时前
Python爬虫进阶:面向对象设计构建高可维护的1688商品数据采集系统
开发语言·爬虫·python
繁华似锦respect1 小时前
C++ unordered_map 底层实现与详细使用指南
linux·开发语言·c++·网络协议·设计模式·哈希算法·散列表
阿蔹1 小时前
JavaWeb-Selenium 配置以及Selenim classnotfound问题解决
java·软件测试·python·selenium·测试工具·自动化
万粉变现经纪人2 小时前
如何解决 pip install 代理报错 407 Proxy Authentication Required 问题
windows·python·pycharm·beautifulsoup·bug·pandas·pip
李剑一2 小时前
Python学习笔记3
python
luod2 小时前
Python包
python
Mr Lee_2 小时前
Smali 文件生成dex装箱算法整合
开发语言·python·算法