在Java中實現觀察者模式,需要定義兩個角色:觀察者(Observer)和被觀察者(Subject)。觀察者可以注冊到被觀察者,當被觀察者狀態發生變化時,觀察者會收到通知并進行相應的處理。
以下是一個簡單的示例代碼,演示如何實現觀察者模式:
import java.util.ArrayList;
import java.util.List;
// 觀察者接口
interface Observer {
void update(String message);
}
// 被觀察者接口
interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void 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 ConcreteSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
private String message;
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(message);
}
}
public void setMessage(String message) {
this.message = message;
notifyObservers();
}
}
public class Main {
public static void main(String[] args) {
ConcreteObserver observer1 = new ConcreteObserver("Observer 1");
ConcreteObserver observer2 = new ConcreteObserver("Observer 2");
ConcreteSubject subject = new ConcreteSubject();
subject.registerObserver(observer1);
subject.registerObserver(observer2);
subject.setMessage("Hello World!");
}
}
在上述代碼中,ConcreteObserver
實現了Observer
接口,并實現了update
方法,用于接收被觀察者的消息。ConcreteSubject
實現了Subject
接口,實現了注冊觀察者、移除觀察者和通知觀察者的方法。被觀察者狀態發生變化時,調用notifyObservers
方法通知所有觀察者。
在Main
類中,創建了兩個觀察者observer1
和observer2
,以及一個被觀察者subject
。將觀察者注冊到被觀察者后,調用setMessage
方法改變被觀察者的狀態,觀察者將收到相應的通知并輸出消息。
以上就是一個簡單實現觀察者模式的示例代碼,你可以根據自己的需求進行修改和擴展。