首页 > 编程语言 >Python设计模式-05-适配器模式

Python设计模式-05-适配器模式

时间:2023-06-16 18:23:19浏览次数:46  
标签:Python 适配 适配器 request 接口 设计模式 adaptee 客户端

适配器模式是一种结构型设计模式,它可以将一个类的接口转换成客户端所期望的另一个接口。适配器模式通常包括以下几个角色:

  • 目标接口(Target):定义了客户端所期望的接口,可以是一个抽象类或接口。
  • 适配器(Adapter):实现了目标接口,并持有一个被适配对象的引用,负责将客户端的请求转换成被适配对象的相应接口。
  • 被适配对象(Adaptee):定义了一个已经存在的接口,但与客户端所期望的接口不一致。

下面是一个简单的 Python 示例,演示了如何使用适配器模式将一个已有的类的接口转换成客户端所期望的接口:

class Target:
    def request(self):
        pass

class Adaptee:
    def specific_request(self):
        pass

class Adapter(Target):
    def __init__(self, adaptee):
        self.adaptee = adaptee

    def request(self):
        self.adaptee.specific_request()

adaptee = Adaptee()
adapter = Adapter(adaptee)
adapter.request()

在上面的示例中,我们定义了一个目标接口 Target,它定义了客户端所期望的接口。然后,我们定义了一个被适配对象 Adaptee,它定义了一个已经存在的接口,但与客户端所期望的接口不一致。接下来,我们定义了一个适配器 Adapter,它实现了目标接口,并持有一个被适配对象的引用,负责将客户端的请求转换成被适配对象的相应接口。在 request() 方法中,我们调用被适配对象的 specific_request() 方法来完成客户端的请求。最后,我们创建了一个被适配对象 adaptee 和一个适配器 adapter,并调用适配器的request() 方法来完成客户端的请求。

需要注意的是,适配器模式可以帮助我们复用已有的类,但也可能会导致代码的复杂性增加。另外,需要确保适配器模式中的适配器类实现了目标接口,并将客户端的请求转换成被适配对象的相应接口,否则可能会导致适配失败。

标签:Python,适配,适配器,request,接口,设计模式,adaptee,客户端
From: https://www.cnblogs.com/superhin/p/17486255.html

相关文章

  • Jenkins-Slave节点 电脑A控制电脑B运行Python脚本
    电脑A装了Jenkins的服务器,电脑B作为Jenkins的节点电脑(Slave)Jenkins服务的配置1、ManageJenkins>ConfigureSystem 找到JenkinsURL,确保不是127.0.0.1或者localhost就可以了。 2、ManageJenkins>ConfigureGlobalSecurity找到代理,设置端口或者选择随机选取,再把代......
  • Python设计模式-02-建造者模式
    建造者模式是一种创建型设计模式,它可以将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常包括以下几个角色:产品(Product):表示被构建的复杂对象,通常包含多个部分或组件。抽象建造者(Builder):定义了创建产品的抽象接口,包括创建产品的各个部......
  • python自动使用虚拟环境和安装依赖
    代码如下,Windows环境测试通过importosimportplatformimportreimportsysfrompathlibimportPathdefis_venv()->bool:"""判断是否处于虚拟环境(也适用于poetry的)"""ifhasattr(sys,"real_prefix"):returnTruer......
  • Python - 方法参数中,带self和不带self的区别
    不带self该python文件中,没有类的概念。因此所有的方法参数中,没有self#文件名solution.pydefpartition(head:Optional[ListNode],x:int)->Optional[ListNode]:#...if__name__=='__main__':#注意这里的区别...partition() 如果未来要在其他类里......
  • python中parse的action = store_true含义
     我们在python脚本中经常看到action="store_true,如下图: parser.add_argument('--image',default=False,action="store_true",help='Imagedetectionmode,willignoreallpositionalarguments') 如果运行代码时加了   --image,那么im......
  • 用python生成正玄波信号源码解析
    一前记项目需要生成不同频点的正玄波信号,没找到现成的软件,只能自己写一个了。顺便温习一下python。 二源码解析:#!/usr/bin/pythonimportnumpyasnpfromscipyimportsignalimportwaveimportstructimportsysnum_samples=48000sampling_rate=48000.0ampl......
  • python configparser读取配置文件
    #coding:utf-8importconfigparserimportosimportjsonbase_path=os.path.dirname(os.path.abspath(__file__))conf_file=os.path.join(base_path,"config.ini")defread_config():#读取配置文件信息try:cf=configparser.ConfigParser()......
  • python 读取yaml配置文件
    #coding:utf-8importyaml#pipinstallpyyamlimportosimportjsonbase_path=os.path.dirname(os.path.abspath(__file__))conf_file=os.path.join(base_path,"db.yaml")defread_yaml():#读取配置文件信息try:f=open('db.yaml&#......
  • Python元组(tuple)和字典(dict)的合并使用
    Python包含6种数据类型,其中Number(数字)、String(字符串)、Tuple(元组)、 List(列表)、Dictionary(字典)、Set(集合);1.回顾Tuple(元组)的常用方法:Tuple的创建:tuple()方法创建,或者小括号的方式,有时也直接省略小括号a=tuple(range(10))b=tuple('hkd')c=tuple([1,2,3])PS:tuple()......
  • python测试系列教程——python+Selenium+chrome自动化测试框架
    需要的环境浏览器(Firefox/Chrome/IE…)PythonSeleniumSeleniumIDE(如果用Firefox)FireBug、FirePath(如果用Firefox)chromedriver、IEDriverServer、phantomjs.exeIDE(Pycharm/Sublime/Eclipse…)1、浏览器建议用Firefox或Chrome,千万不要用最新版本,要用早两到三个版本的。2......