您的位置:首页 > 教育 > 锐评 > 写python代码,怎么用工厂模式思维设计接口?

写python代码,怎么用工厂模式思维设计接口?

2025/5/8 16:13:26 来源:https://blog.csdn.net/li2642530979/article/details/140439551  浏览:    关键词:写python代码,怎么用工厂模式思维设计接口?

接口的好处

接口就是抽象方法,用来设计后架构,后端开发者和客户端调用者都可以使用这个接口规则同步写代码,客户端调用者(app、网页甚至时自动化接口测试)不用担心后端对接口的实现细节具体是什么样子的。直接去调用就行,时间上也不用等后端开发把代码写完再去写app、网页和测试代码,大大简化了开发流程复杂程度。

在这里插入图片描述

接口的抽象类和接口具体实现

首先定义好接口的两个方法;这个是接口的抽象类,也就是告诉前端开发者你只需要关注调用时要使用postget两个函数,调用时不要拼写错误。告诉后端开发者,你要实现细节是上传数据要使用post ,下载数据要使用get。不要搞错了。有了这个抽象类,前后端开发者可以同步去做各自的事情,而不用担心最后合并时出现冲突。比如我前端搜索框嵌入了post, 你后端实现的时候写成了send。这样我们就出现了冲突。

from abc import ABCMeta, abstractmethod
class Protocol(metaclass=ABCMeta):'''协议抽象类,具体需实现http/websocket/tcp传输协议'''@abstractmethoddef post(self, body):'''发送请求的接口'''pass@abstractmethoddef get(self):'''获取数据的接口'''pass

有了接口方法postget后,对于后端开发者来说,我不仅需要支持http协议的post/get ,还要支持websocket的post/get。但又不能影响到前端开发者调用时出问题。怎么办?那就是根据不同的协议去开发postget

import requests
import socket
#http协议
class HttpProtocol(Protocol):def __init__(self, ip):self._ip = ipdef post(self,body):http.request('POST', url, body=json.dumps(body))def get(self):http.get('get', url)#websocket协议 
class WebSocketProtocol(Protocol):def __init__(self, ip):self._ip = ipdef post(self, body):"""retrieve URL path from body"""if 'requestUrl' not in body:print('requestUrl is needed for WebSocket request')return Falsewith self._ws_mutex:self._requests.append(json.dumps(body))print('已经发送: {}'.format(json.dumps(body)))return self.get_data()def get(self):while True:# connect to serverif not self._connected:self._try_connect()if not self._connected:time.sleep(0.1)continue

有了接口,针对不同的ip进行连接

class TransportationFactory(metaclass=ABCMeta):'''传输层连接到ip'''@abstractmethoddef connect(self,ip):'''连接到ip'''passclass HttpTransportation(TransportationFactory):def connect(self,ip):return HttpProtocol(ip)class WebSocketTransportation(TransportationFactory):def connect(self,ip):return WebSocketProtocol(ip)class TcpTransportation(TransportationFactory):def connect(self,ip):return TcpProtocol(ip)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com