观察者模式 java
时间: 2023-12-13 12:34:28 浏览: 41
观察者模式是一种常见的设计模式,用于在对象之间建立一对多的依赖关系。在该模式中,一个主题(被观察者)维护了一个观察者列表,并在自身状态发生变化时通知所有观察者进行相应的更新。
以下是一个Java实现观察者模式的例子:
1.定义主题接口Subject和观察者接口Observer:
```java
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
public interface Observer {
void update();
}
```
2.实现具体的主题类ConcreteSubject:
```java
import java.util.ArrayList;
import java.util.List;
public class ConcreteSubject implements Subject {
private int state;
private List<Observer> observers = new ArrayList<>();
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
notifyObservers();
}
@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();
}
}
}
```
3.实现具体的观察者类ConcreteObserver:
```java
public class ConcreteObserver implements Observer {
private int observerState;
private ConcreteSubject subject;
public ConcreteObserver(ConcreteSubject subject) {
this.subject = subject;
this.subject.registerObserver(this);
}
@Override
public void update() {
observerState = subject.getState();
System.out.println("Observer state updated: " + observerState);
}
}
```
4.使用观察者模式:
```java
public class ObserverPatternDemo {
public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer1 = new ConcreteObserver(subject);
ConcreteObserver observer2 = new ConcreteObserver(subject);
subject.setState(1);
subject.setState(2);
}
}
```
输出结果为:
```
Observer state updated: 1
Observer state updated: 1
Observer state updated: 2
Observer state updated: 2
```