同事死了,调解员会死吗?
Does Mediator die when Colleague dies?
我有这个问题与 Mediator Design Pattern 有关,它属于 GoF[=26] 的 Behavioral 类别=].我正在尝试使用设计模式原则编写一个 C# 项目。
假设这是同事 class:
abstract class Colleague
{
Mediator mediator;
// ...
}
还有调解员class:
class Mediator
{
List<Colleague> colleagueList;
// ...
}
- 我们可以有很多同事:c1、c2、c3、...
- 还有一个 Mediator:mediator
调解员充当中心点,允许同事之间进行交流。
假设在我们代码的某个时刻,一些 Colleague 死了。 Mediator 对象也会消亡吗?
在 .NET 中,当不再有 "rooted" 对对象的引用时,仅 "die"(获取垃圾收集)对象(例如,单独的循环引用不算在内)。所以只要 Colleague
被其他东西引用,它引用的 Mediator
就会保留。
一个对象只有在不再有引用时才会被垃圾回收。
你说有多个同事和一个调解员,但问题有点混乱。
书面部分表明(至少在我的解释中)所有同事都提到了一个调解员。如果是这种情况,那么中介只会在最后一位同事 "dies"(没有更多引用)之后被 GC。
但是,根据您的代码示例,Mediator
class 本身在私有 List<Colleague>
字段中保存对所有同事的引用。如果是这种情况,那么 Mediator
class 的生命周期不依赖于 Collegue
class 的任何(或所有)实例。 colleagueList
可以为 null 或空,并且 Meditor
实例将保留,只要某处仍然存在对 it 的引用。
我有这个问题与 Mediator Design Pattern 有关,它属于 GoF[=26] 的 Behavioral 类别=].我正在尝试使用设计模式原则编写一个 C# 项目。 假设这是同事 class:
abstract class Colleague
{
Mediator mediator;
// ...
}
还有调解员class:
class Mediator
{
List<Colleague> colleagueList;
// ...
}
- 我们可以有很多同事:c1、c2、c3、...
- 还有一个 Mediator:mediator
调解员充当中心点,允许同事之间进行交流。 假设在我们代码的某个时刻,一些 Colleague 死了。 Mediator 对象也会消亡吗?
在 .NET 中,当不再有 "rooted" 对对象的引用时,仅 "die"(获取垃圾收集)对象(例如,单独的循环引用不算在内)。所以只要 Colleague
被其他东西引用,它引用的 Mediator
就会保留。
一个对象只有在不再有引用时才会被垃圾回收。
你说有多个同事和一个调解员,但问题有点混乱。
书面部分表明(至少在我的解释中)所有同事都提到了一个调解员。如果是这种情况,那么中介只会在最后一位同事 "dies"(没有更多引用)之后被 GC。
但是,根据您的代码示例,Mediator
class 本身在私有 List<Colleague>
字段中保存对所有同事的引用。如果是这种情况,那么 Mediator
class 的生命周期不依赖于 Collegue
class 的任何(或所有)实例。 colleagueList
可以为 null 或空,并且 Meditor
实例将保留,只要某处仍然存在对 it 的引用。