当前位置:
首页 > temp > python入门教程 >
-
适配器方法–Python 设计模式
适配器方法–Python 设计模式
原文:https://www . geesforgeks . org/adapter-method-python-design-patterns/
适配器方法是一种结构设计模式,帮助我们使不兼容的对象相互适应。Adapter 方法是最容易理解的方法之一,因为我们有很多现实生活中的例子可以与之类比。这个方法的主要目的是在两个不兼容的接口之间建立一个桥梁。此方法为类提供了不同的接口。通过思考有线适配器,我们可以更容易地理解这个概念,有线适配器允许我们在有不同形状插座的地方给手机充电。 利用这个思想,我们可以集成由于接口不兼容而无法集成的类。
不使用适配器方法时出现问题
假设您正在创建一个显示所有不同类型车辆数据的应用程序。它以 XML 格式从不同车辆组织的 API 中获取数据,然后显示信息。 但是假设在某个时候,你想用一种机器学习算法升级你的应用程序,这种算法可以很好地处理数据,并且只提取重要的数据。但是有一个问题,它只接受 JSON 格式的数据。 对机器学习算法进行修改,使其采用 XML 格式的数据,这将是一种非常糟糕的方法。
问题-适配器-方法
使用适配器方法的解决方案
为了解决我们上面定义的问题,我们可以使用适配器方法,这有助于创建适配器对象。 要在我们的代码中使用适配器:
- 客户端应该通过使用目标接口调用适配器上的方法向适配器发出请求。
- 使用适配器接口,适配器应该在适配器上翻译该请求。
- 客户端收到呼叫结果,并且他/她不知道适配器的存在。
# Dog - Cycle
# human - Truck
# car - Car
class MotorCycle:
"""Class for MotorCycle"""
def __init__(self):
self.name = "MotorCycle"
def TwoWheeler(self):
return "TwoWheeler"
class Truck:
"""Class for Truck"""
def __init__(self):
self.name = "Truck"
def EightWheeler(self):
return "EightWheeler"
class Car:
"""Class for Car"""
def __init__(self):
self.name = "Car"
def FourWheeler(self):
return "FourWheeler"
class Adapter:
"""
Adapts an object by replacing methods.
Usage:
motorCycle = MotorCycle()
motorCycle = Adapter(motorCycle, wheels = motorCycle.TwoWheeler)
"""
def __init__(self, obj, **adapted_methods):
"""We set the adapted methods in the object's dict"""
self.obj = obj
self.__dict__.update(adapted_methods)
def __getattr__(self, attr):
"""All non-adapted calls are passed to the object"""
return getattr(self.obj, attr)
def original_dict(self):
"""Print original object dict"""
return self.obj.__dict__
""" main method """
if __name__ == "__main__":
"""list to store objects"""
objects = []
motorCycle = MotorCycle()
objects.append(Adapter(motorCycle, wheels = motorCycle.TwoWheeler))
truck = Truck()
objects.append(Adapter(truck, wheels = truck.EightWheeler))
car = Car()
objects.append(Adapter(car, wheels = car.FourWheeler))
for obj in objects:
print("A {0} is a {1} vehicle".format(obj.name, obj.wheels()))
类图
作为结构设计模式类型的适配器方法类图:
适配器类图
优势
- 单一责任原则:我们可以用 Adapter 方法实现单一责任原则,因为在这里我们可以将具体的代码与客户端的主要逻辑分开。
- 灵活性:适配器方法有助于实现代码的灵活性和可重用性。
- 不太复杂的类:我们的客户端类并不因为必须使用不同的接口而变得复杂,并且可以使用多态性在适配器的不同实现之间进行交换。
- 开/闭原则:我们可以在不违反开/闭原则的情况下,在代码中引入 ne wadapter 类。
不足之处
- 代码的复杂性:随着我们引入了一组新的类、对象和接口,or 代码的复杂性肯定会上升。
- 适应性:很多时候,我们需要和 adaptee 链进行多次的适配,才能达到我们想要的兼容性。
适应性
- 让类和接口兼容:当我们需要让某些类兼容进行通信时,总是会用到 Adapter 方法。
- 与继承相关:当我们想要重用一些代码,即缺少某些功能的类和接口时,可以使用适配器方法来完成。
进一步阅读:Java 中的 适配器模式
版权属于:月萌API www.moonapi.com,转载请注明出处
本文链接:https://www.moonapi.com/news/143.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数