gpt4 book ai didi

java - 更好的模式观察者?

转载 作者:行者123 更新时间:2023-11-29 05:59:23 24 4
gpt4 key购买 nike

我使用模式 Observer,但发现很难从具有监听器的类继承。如果在继承类中也存在监听器,则很难控制哪些监听器工作。是否存在类似于 Observer 但可以更好地控制听众的模式?谢谢。

最佳答案

看来你不想使用继承来实现观察者模式。

如果我在上面的观点上没有弄错,那么你总是可以使用接口(interface)来实现它。只需为 Subject 和 Observer 声明两个接口(interface),然后让您的类实现它们。

例如,您的主题可能看起来像这样 -

public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}

观察者 -

public interface Observer {
public void update(int age, float salary); // imaginary parameters.....
}

然后,您的具体主题可以从上面的 Subject 接口(interface)继承 -

public class SubjectImpl implements Subject{
private ArrayList observers;

public void registerObserver(Observer o){
observers.add(o);
}
public void removeObserver(Observer o){
int i = observers.indexOf(o);
if (i >= 0) {
observers.remove(i);
}
}
public void notifyObservers(){
for (int i = 0; i < observers.size(); i++) {
Observer observer = (Observer)observers.get(i);
observer.update(30, 200.50); // imaginary arguments, provide your own...
}
}
}

和你的 Observer 实现 -

public class ObserverImpl implements Observer{

public ObserverImpl(Subject s){
s.registerObserver(this);
}

public void update(int age, float salary){
// implementation
}
}

然后你可以使用 -

Subject s = new SubjectImpl();
Observer o = new ObserverImpl(s);

// do whatever you want now

这种方法肯定比 Class Inheritance 更好,因为在这种情况下,您的主题和观察者都可以从其他类继承,提供更灵活的设计。

如果您的问题是关于在不继承的情况下提供 java 监听器实现,那么您可以使用 Annonymous Classes为此 -

ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
System.out.println("Anonymous class example");
}
};

yourButton.addActionListener(listener);

关于java - 更好的模式观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10734123/

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