假设我有一个工厂类,其创建方法可以创建对象,并且还有一个关闭选项,使所有创建的对象无效(因此不能再使用它们)。
类似的东西(C#):
public class MyFactory {
public MyObject CreateObject() { ... }
public void DestroyAllObjects() { ... }
}
此代码的客户端创建对象,缓存引用并使用它。对象可以手动销毁,也可以通过调用DestroyAllObjects'来销毁。在工厂上课。
这里的问题是一个悬垂的指针'问题。如何通知客户端代码缓存的对象已失效且不应再使用?我想要使用回调(con:使客户端代码复杂化)或检查每个调用该对象仍然有效(con:使MyObject代码+代码复制复杂化)。
据我所知,在理想的世界中,对象会自行破坏,但系统需要集中关闭方法。
如果有人在过去遇到过类似的问题,我很乐意听到您的想法。
答案 0 :(得分:0)
如果您的工厂可以销毁对象,我们可以说它是默认所有者。那么为什么不把更多的功能集中在工厂或工厂附近呢?即关于对象的生动性,在权威的注册表中打开工厂。
一种可能性:在MyObject
周围创建一个包装器,在每个操作之前使用注册表检查底层MyObject
是否已被销毁?如果它已被销毁,它将是No-Op或抛出异常或任何你喜欢的。