我是Python的新手,我想使用Python类实现工厂模式。
我想为两种不同类型的通信渠道实现一种抽象。例如,套接字和HTTP。
我想保持相同的接口,以便与主应用程序中的这两个通信通道进行通信。这样,如果添加了新的通信通道,则应用程序中的更改将降至最低。
在Python中实现此目标的最佳方法是什么?任何参考资料都会有所帮助。
工厂的一般实现如下:
import abc.ABC, abc.abstractmethod
# I am omitting __init__ implementation of this class, that is self explanatory
class WebProtocol(ABC):
@abstractmethod
def abstract_method_1(self):
pass
@abstractmethod
def protocol_type(self):
pass
使用WebProtocol接口扩展了基于HTTP或SOCKET的协议的实现。
供参考结帐:http://masnun.rocks/2017/04/15/interfaces-in-python-protocols-and-abcs/
再次在此处创建一个Factory接口,公开Factory类的主要功能。即提供
import abc.ABC, abc.abstractmethod # I am omitting __init__ implementation of this class, that is self explanatory class Factory(ABC): @property factory = {} def provide(self, factory_type): ''' This method is for providing implementations based on protocolType from the factory ''' factory.get(factory_type, None)
import Factory # I am omitting __init__ implementation of this class, that is self explanatory class WebProtocolFactory(Factory): factory = {} def __init__(self): factory['HTTP'] = HttpWebProtocol() factory['SOCKET'] = SocketWebProtocol()
- 无论何时需要WebProtocol Service的任何特定实现,都只需使用工厂的提供功能(ProtocolType)即可根据协议类型检索特定实现。
函数。import WebProtocolFactory #For using the factory webProtocolFactory = WebProtocolFactory() httpWebProtocol = webProtocolFactory.provide('HTTP') socketProtocolFactory = webProtocolFactory.provide('SOCKET')
- [如果在稍后阶段添加任何新协议,只需创建该协议的实现,并在工厂中注册get,但添加init