Java事件机制和观察者模式在概念和应用上有一些相似之处,但也存在一些关键的区别。以下是它们之间的主要区别:
Observer和Observable),但也可以自定义接口和类来实现更复杂的功能。// 主题接口
interface Subject {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers();
}
// 观察者接口
interface Observer {
void update(String message);
}
// 具体主题
class ConcreteSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
private String message;
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
observers.remove(o);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(message);
}
}
public void setMessage(String message) {
this.message = message;
notifyObservers();
}
}
// 具体观察者
class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received message: " + message);
}
}
// 事件源
class EventSource {
private List<ActionListener> listeners = new ArrayList<>();
public void addActionListener(ActionListener listener) {
listeners.add(listener);
}
public void removeActionListener(ActionListener listener) {
listeners.remove(listener);
}
public void doSomething() {
// 触发事件
ActionEvent event = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "Event occurred");
for (ActionListener listener : listeners) {
listener.actionPerformed(event);
}
}
}
// 事件监听器接口
interface ActionListener extends EventListener {
void actionPerformed(ActionEvent e);
}
// 具体事件监听器
class ConcreteActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Event received: " + e.getActionCommand());
}
}
根据具体需求和项目背景,可以选择合适的方式来处理事件和对象之间的依赖关系。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。