用java语言写一个观察者设计模式示例
时间: 2023-03-05 15:38:21 浏览: 74
好的,下面是一个简单的Java代码示例,演示如何使用观察者设计模式:
观察者接口:
```java
public interface Observer {
void update(String message);
}
```
具体观察者实现:
```java
public class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " 收到消息:" + message);
}
}
```
主题接口:
```java
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(String message);
}
```
具体主题实现:
```java
import java.util.ArrayList;
import java.util.List;
public class ConcreteSubject implements Subject {
private List<Observer> 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(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
```
客户端代码:
```java
public class Client {
public static void main(String[] args) {
Subject subject = new ConcreteSubject();
Observer observer1 = new ConcreteObserver("Observer1");
Observer observer2 = new ConcreteObserver("Observer2");
Observer observer3 = new ConcreteObserver("Observer3");
subject.registerObserver(observer1);
subject.registerObserver(observer2);
subject.registerObserver(observer3);
subject.notifyObservers("Hello World!");
subject.removeObserver(observer2);
subject.notifyObservers("Goodbye World!");
}
}
```
在这个示例中,我们定义了一个 `Observer` 接口,以及一个具体的 `ConcreteObserver` 类,它实现了 `Observer` 接口。我们还定义了一个 `Subject` 接口,以及一个具体的 `ConcreteSubject` 类,它实现了 `Subject` 接口。客户端代码演示了如何使用这些类来创建观察者模式。
在客户端代码中,我们首先创建了一个具体的主题对象 `ConcreteSubject`,然后创建了三个具体观察者对象 `ConcreteObserver`,并将它们注册到主题中。接下来,我们调用 `notifyObservers` 方法来通知所有观察者主题的状态发生了改变,并且传递了一个字符串参数作为消息。最后,我们从主题中删除了一个观察者,并再次调用 `notifyObservers` 方法来通知所有观察者主题的状态发生了改变。