gpt4 book ai didi

java - 如何避免观察者模式的循环引用?

转载 作者:行者123 更新时间:2023-11-30 02:35:34 27 4
gpt4 key购买 nike

我遇到了这样的情况:

public class A
{
private ArrayList<Listener> listeners = new ArrayList<Listener>();

public A()
{
// stub
}

public void addListener(Listener listener)
{
this.listeners.add(listener);
}

public void removeListener(Listener listener)
{
this.listeners.remove(listener);
}

public interface Listener
{
// stub
}
}

public class B implements A.Listener
{
private A instanceOfA;

public B()
{
this.instanceOfA = new A();
this.instanceOfA.addListener(this);
}
}

我相信 B 永远不会被销毁,因为 A 保留了对它的引用,并且 A 永远不会被销毁,因为 B 保留了对它的引用。

这似乎是一种常见的设计模式,但没有人解释如何避免这种循环引用?

最佳答案

实际上,这个问题已经解决,观察者 B 不会直接引用 A。它应该是一个小类,专注于处理其事件的唯一任务,并且不应该与 A 有任何直接耦合。事实上,这就是观察者模式的要点:一种向 A 添加代码的灵活方法,而无需对其进行硬依赖。

如果事件处理程序必须观察作为事件源的对象 (A),则事件回调方法应声明一个 A 类型的参数,以便可以以无状态方式传递给处理程序,仅在事件处理期间使用,之后不保留。

关于java - 如何避免观察者模式的循环引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43200327/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com