Design patterns 哪种设计模式与工厂模式相反?
我想知道是否有和工厂模式相反的模式。例如,当需要删除某个对象时,需要执行一些额外的工作,以撤消在factory对象中执行的配置 例如,使用Delete方法扩展工厂对象似乎是错误的,因为工厂模式是一种严格的创建模式Design patterns 哪种设计模式与工厂模式相反?,design-patterns,factory-pattern,Design Patterns,Factory Pattern,我想知道是否有和工厂模式相反的模式。例如,当需要删除某个对象时,需要执行一些额外的工作,以撤消在factory对象中执行的配置 例如,使用Delete方法扩展工厂对象似乎是错误的,因为工厂模式是一种严格的创建模式 更新:我之所以使用工厂,是因为需要进行的配置会给对象引入一些不适合的依赖项。将此取消配置放在构造函数中也会引起同样的问题。可以使用存储库删除持久化对象,或者可以使用dispose方法对仅内存中的对象进行清理。这是使用factory的正确方法。工厂不仅是创建对象的方式,而且是这样说的:我
更新:我之所以使用工厂,是因为需要进行的配置会给对象引入一些不适合的依赖项。将此取消配置放在构造函数中也会引起同样的问题。可以使用存储库删除持久化对象,或者可以使用dispose方法对仅内存中的对象进行清理。这是使用factory的正确方法。工厂不仅是创建对象的方式,而且是这样说的:我需要对这些对象进行特殊初始化。对于您的问题,我认为最好的解决方案是通知工厂一些事件,如:。所以您的对象创建将以这样的方式完成:创建,订阅工厂到新创建的对象的事件。每次删除对象时,您都会通知工厂并执行所需的操作 如果您不想将其放入工厂,可以将其委托给其他对象,如DeathKeeper;-)。因此,您的代码将如下所示:
//Inside factory create method
MyObject obj = GetNewInitializedObject();
_detahKeeper.RegisterObject(obj);
return obj;
现在,每次您需要删除对象时,您的对象都会通知死亡守护者,并且它会使所有的处理逻辑。顺便说一下,我不知道它是如何工作的,但您可以使用IDisposable接口来执行自定义逻辑,以处理对象所持有的资源。这个决定取决于你的项目中有什么,由你决定。我使用“回收设施”模式与工厂协同工作:
- 对每个可以回收的类都有一个“干净”的方法
- 每个对象实例都有一个“唯一id”
- RF根据某些策略存储对象(例如,仅保留Y类的X个实例)
- 当需要类Y的实例时,工厂会“询问”RF是否得到一个实例
- 如果RF有一个方便的方法,RF将调用实例上的“clean()”方法并将其返回工厂
希望这能有所帮助。你说的“删除”到底是什么意思?从内存中释放或从数据存储中删除?删除意味着从数据存储中删除它,这将由存储库完成。在factory对象中执行了什么样的“配置”?对象应该能够在执行析构函数和/或dispose任务后自行清理。我认为工厂不应该知道它创建的任何对象。工厂对象执行的配置工作连接聚合根并初始化安全上下文。在构造函数中这样做会引入一些依赖项,这些依赖项只会在那里使用。工厂模式似乎适合创建。我现在将此“取消配置”放在存储库中。是否需要销毁任何持久化(数据库/文件)信息?