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

接口的好处

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

在这里插入图片描述

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

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

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

    @abstractmethod
    def 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 = ip
        
    def 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 = ip
        
    def post(self, body):
        """
        retrieve URL path from body
        """
        if 'requestUrl' not in body:
            print('requestUrl is needed for WebSocket request')
            return False

        with 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 server
	            if not self._connected:
	                self._try_connect()
	            if not self._connected:
	                time.sleep(0.1)
	                continue

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

class TransportationFactory(metaclass=ABCMeta):
    '''传输层连接到ip'''
    @abstractmethod
    def connect(self,ip):
        '''连接到ip'''
        pass

class 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)

相关推荐

  1. Python PDF转化wolrd代码怎么

    2024-07-16 22:46:03       28 阅读
  2. 工厂设计模式思考

    2024-07-16 22:46:03       56 阅读
  3. python 三层架构思想代码

    2024-07-16 22:46:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 22:46:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 22:46:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 22:46:03       58 阅读
  4. Python语言-面向对象

    2024-07-16 22:46:03       69 阅读

热门阅读

  1. 计算机图形学题库

    2024-07-16 22:46:03       18 阅读
  2. 深度学习损失计算

    2024-07-16 22:46:03       19 阅读
  3. Python字典基础与高级详解

    2024-07-16 22:46:03       19 阅读
  4. 代码随想录打卡第二十五天

    2024-07-16 22:46:03       21 阅读