gpt4 book ai didi

java - 避免观察者代码中的多重循环

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:17 24 4
gpt4 key购买 nike

我有一个类 AllListener 来封装多个 Listener,如下所示。问题是我必须在每个事件方法(onStart()onEnd())中编写一个循环。这在观察者模式代码中是很正常的方式,但味道不好。有没有更好的方法来编写一次循环?谢谢!

class AllListener{

List<Listener> listeners;

void onStart(){
for(Listener l:listeners)//loop
l.onStart();
}

void onEnd(){
for(Listener l:listeners)//loop
l.onEnd();
}
}

最佳答案

避免这种情况很难,因为 Java 仍然没有闭包。基本上你有这些选择:

  • 为您的“ Action ”使用包装器类
  • 使用反射(我认为这里太复杂了)
  • 使用图书馆(例如 functionaljava)
  • 使用 Java 的注解处理器生成代码 [致谢:Little Bobby Tables ]

.

class AllListener{
List<Listener> listeners;

private interface Wrapper {
public void run(Listener l);
}

void onStart(){
loop(new Wrapper(){
public void run(Listener l) {
l.onStart();
});
}

void onEnd(){
loop(new Wrapper(){
public void run(Listener l) {
l.onEnd();
});
}

private void loop(Wrapper w) {
for(Listener l:listeners)
w.run(l);
}
}

如您所见,这可行,但与原始版本相比可读性较差,如果您只有两种调用方法,则不值得麻烦。

关于java - 避免观察者代码中的多重循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031044/

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