用Java写观察者模式案例代码
时间: 2024-01-26 18:02:25 浏览: 28
好的,下面是一个简单的观察者模式案例代码:
主题接口 Subject.java:
```java
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
```
观察者接口 Observer.java:
```java
public interface Observer {
void update(int value);
}
```
主题实现类 NumberGenerator.java:
```java
import java.util.ArrayList;
import java.util.List;
public class NumberGenerator implements Subject {
private List<Observer> observers;
private int number;
public NumberGenerator() {
observers = new ArrayList<>();
}
@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(number);
}
}
public void generateNumber(int number) {
this.number = number;
notifyObservers();
}
}
```
观察者实现类 BinaryObserver.java:
```java
public class BinaryObserver implements Observer {
@Override
public void update(int value) {
System.out.println("Binary: " + Integer.toBinaryString(value));
}
}
```
观察者实现类 HexObserver.java:
```java
public class HexObserver implements Observer {
@Override
public void update(int value) {
System.out.println("Hex: " + Integer.toHexString(value));
}
}
```
测试类 ObserverPatternExample.java:
```java
public class ObserverPatternExample {
public static void main(String[] args) {
NumberGenerator generator = new NumberGenerator();
Observer binaryObserver = new BinaryObserver();
Observer hexObserver = new HexObserver();
generator.registerObserver(binaryObserver);
generator.registerObserver(hexObserver);
generator.generateNumber(10);
generator.removeObserver(binaryObserver);
generator.generateNumber(20);
}
}
```
运行结果:
```
Binary: 1010
Hex: a
Hex: 14
```