我正在构建一个对象池,发现定期引用工厂或对象池来处理对象真的很乏味。相反,我正在考虑将池直接构建到对象的类中。
抽象对象类:
class Object(ABC):
_pool = []
_max_pool_size = 10
def __new__(cls, *args, **kwargs):
if cls._pool:
instance = cls._pool.pop()
instance.__init__(*args, **kwargs)
return instance
else:
return super().__new__(cls)
@classmethod
def release(cls, instance):
if len(cls._pool) < cls._max_pool_size:
cls._pool.append(instance)
实施:
@dataclass
class FooObject(Object):
n: int
foo_1 = FooObject(1)
FooObject.release(foo_1)
但是在研究对象池设计模式时,分离池、对象并使用工厂似乎更常见。这是为什么?使用这种方法会遇到什么问题?
您可以从不同的角度回答您的问题。
Object
。Object
。我们必须能够访问池而不必处理 Object
。Object
类的情况下维护池。 Pool 和 Object
使用完全独立的逻辑。例如,Object
可以处理用户凭据。为什么这样的对象还包含管理池的逻辑?将这两个职责分开还可以使 Pool
和 Object
类位于不同的逻辑位置(源文件、DLL 等)或物理位置(例如客户端-服务器)。如果您了解一些 OO 设计原则,您会觉得使用
Object
来实现自己的池在语义上是错误的设计决策。虽然可以通过
Object
本身实现对象池,但它会产生丑陋且过于复杂的代码和类型之间的关系。
如果您能回答以下问题,您也可以回答您自己的问题:
“为什么我们没有一个包含应用程序的大类?”