哪种设计模式与Factory模式相反?

时间:2009-09-15 07:52:23

标签: design-patterns factory-pattern

我想知道工厂模式是否存在相反的模式。例如,当需要删除某个对象时,需要完成一些额外的工作,以撤消在工厂对象中执行的配置。

例如,使用Delete方法扩展工厂对象似乎是错误的,因为工厂模式是严格的创建模式。

更新:我之所以使用工厂是因为需要完成的配置会给对象带来一些不适合的依赖关系。将此解除配置放在构造函数中会产生同样的问题。

3 个答案:

答案 0 :(得分:4)

可以使用存储库来删除持久化对象,也可以使用dispose方法对仅内存对象进行一些清理。

答案 1 :(得分:3)

这是使用工厂的正确方法。 Factory不仅可以创建对象,还可以说:我需要对这些对象进行特殊的初始化。有了你的问题,我认为最好的解决方案是通过一些事件通知工厂,比如处理。因此,您的对象创建将以这样的方式完成:创建,订阅工厂到新创建的对象的事件。每次删除对象时,您都会通知工厂并执行您需要的操作。

如果你不喜欢将它放入工厂,可以将它委托给某种其他对象,比如DeathKeeper ;-)。所以你的代码看起来像这样:

//Inside factory create method
MyObject obj = GetNewInitializedObject();
_detahKeeper.RegisterObject(obj);

return obj;

现在,每次你需要删除对象时,你的对象都会通知死亡守护者,它会产生所有处置逻辑。顺便说一句,我不知道它是如何工作的,但你可以使用IDisposable接口来处理对象所拥有的资源的自定义逻辑。决定取决于项目中的内容,取决于您。

答案 2 :(得分:2)

我使用“回收设施”模式与工厂协同工作:

  • 对每个可以回收的类都有一个“干净”的方法
  • 每个对象实例都有一个“唯一ID”

每次物体到达使用寿命时,请将其发送至“回收设施”(RF):

  • RF根据某些策略存储对象(例如,仅保留Y类的X实例)
  • 当需要Y类的实例时,工厂会“询问”RF是否有一个
    • 如果RF有一个方便,RF会在实例上调用“clean()”方法并将其返回到工厂

......等等。

希望这有帮助。