Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 哪种设计模式与工厂模式相反?_Design Patterns_Factory Pattern - Fatal编程技术网

Design patterns 哪种设计模式与工厂模式相反?

Design patterns 哪种设计模式与工厂模式相反?,design-patterns,factory-pattern,Design Patterns,Factory Pattern,我想知道是否有和工厂模式相反的模式。例如,当需要删除某个对象时,需要执行一些额外的工作,以撤消在factory对象中执行的配置 例如,使用Delete方法扩展工厂对象似乎是错误的,因为工厂模式是一种严格的创建模式 更新:我之所以使用工厂,是因为需要进行的配置会给对象引入一些不适合的依赖项。将此取消配置放在构造函数中也会引起同样的问题。可以使用存储库删除持久化对象,或者可以使用dispose方法对仅内存中的对象进行清理。这是使用factory的正确方法。工厂不仅是创建对象的方式,而且是这样说的:我

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

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


更新:我之所以使用工厂,是因为需要进行的配置会给对象引入一些不适合的依赖项。将此取消配置放在构造函数中也会引起同样的问题。

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

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

如果您不想将其放入工厂,可以将其委托给其他对象,如DeathKeeper;-)。因此,您的代码将如下所示:

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

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

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

  • 对每个可以回收的类都有一个“干净”的方法
  • 每个对象实例都有一个“唯一id”
每次对象达到其寿命终点时,将其发送到“回收设施”(RF):

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


希望这能有所帮助。

你说的“删除”到底是什么意思?从内存中释放或从数据存储中删除?删除意味着从数据存储中删除它,这将由存储库完成。在factory对象中执行了什么样的“配置”?对象应该能够在执行析构函数和/或dispose任务后自行清理。我认为工厂不应该知道它创建的任何对象。工厂对象执行的配置工作连接聚合根并初始化安全上下文。在构造函数中这样做会引入一些依赖项,这些依赖项只会在那里使用。工厂模式似乎适合创建。我现在将此“取消配置”放在存储库中。是否需要销毁任何持久化(数据库/文件)信息?