我目前正在用 Python 实现工厂设计模式,我有几个问题。
有什么方法可以防止直接实例化实际的具体类?例如,如果我有一个生成 Vehicles 的 VehicleFactory,我希望用户只使用该工厂,并防止任何人意外地直接实例化 Car() 或 Truck()。我也许可以在init ()中抛出异常,但这也意味着工厂无法创建它的实例......
现在在我看来,工厂越来越让人上瘾。似乎一切都应该成为工厂,这样当我更改内部实现时,客户端代码不会改变。我很想知道什么时候需要使用工厂,什么时候不适合使用。例如,我可能有一个 Window 类,而现在只有一个这种类型(没有 PlasticWindow、ReinforcedWindow 或类似的东西)。在这种情况下,我是否应该为客户端使用工厂来生成 Window,以防我将来可能添加更多类型的 Windows?
我只是想知道是否有一种通常的方式来调用工厂。例如,现在我将我的 Vehicle 工厂称为 Vehicles,因此代码将类似于 Vehicles.create(...)。我看到很多教程都在做类似 VehicleFactory 的教程,但我发现它太长了,而且有点暴露了实现。
编辑:我所说的“公开实施”的意思是它让人们知道它是一个工厂。我的感觉是客户不需要知道它是一个工厂,而是作为一个可以为你返回对象的类(这当然是一个工厂,但也许没有必要明确告诉客户?)。我知道源代码很容易暴露,所以我的意思不是“暴露源代码中实现功能的方式”。
谢谢!