9

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

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

更新:我使用工厂的原因是因为需要完成的配置会给不适合的对象引入一些依赖项。将此取消配置放在构造函数中会带来同样的问题。

4

3 回答 3

4

存储库可用于删除持久对象,或者您可以使用 dispose 方法对仅在内存中的对象进行一些清理。

于 2009-09-15T07:55:18.810 回答
3

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

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

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

return obj;

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

于 2009-09-16T04:01:35.963 回答
2

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

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

每次对象达到其生命周期结束时,将其发送到“回收设施”(RF):

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

……以此类推。

希望这可以帮助。

于 2009-09-19T18:44:00.740 回答