在上文基础上,补充客户端test类的Java代码
时间: 2024-11-09 09:23:56 浏览: 6
在上文中,我们已经定义了`ConcreteSubject`和`ConcreteObserver`。现在我们可以创建一个`TestClient`类,用于测试这两个组件如何交互:
```java
import java.util.ArrayList;
public class TestClient {
public static void main(String[] args) {
// 创建一个具体主题
ConcreteSubject subject = new ConcreteSubject();
// 创建两个观察者
ConcreteObserver observer1 = new ConcreteObserver("Observer 1");
ConcreteObserver observer2 = new ConcreteObserver("Observer 2");
// 将观察者添加到主题
subject.attach(observer1);
subject.attach(observer2);
// 模拟主题状态改变
subject.setState("Status changed"); // 这里只是一个示例,实际应用需根据主题逻辑
// 主题会自动通知所有已注册的观察者
System.out.println("Observing after status change...");
subject.notifyObservers();
// 移除一个观察者
subject.detach(observer1);
// 再次更改状态,只有剩下的观察者会收到通知
subject.setState("Another change");
subject.notifyObservers();
}
}
```
在这个例子中,`TestClient`通过`ConcreteSubject`的`attach`方法添加观察者,然后模拟主题状态变化(`setState`),`notifyObservers`方法将自动调用所有已附加的观察者的`update`方法。最后,通过`detach`移除一个观察者,再次变更状态时,只剩下一个观察者会被通知。
阅读全文