import java.util.ArrayList;
import java.util.List;
/**
* 被观察对象
*/
class ObservedObject {
// 定义观察者的对象容器
protected List<Observer> observers = new ArrayList<>();
// 实现构造方法
public ObservedObject() {
}
// 实现观察者的增添方法
public void add(Observer observer) {
if (observer == null) {
throw new NullPointerException();
}
observers.add(observer);
}
// 实现观察者删除方法
public void remove(Observer observer) {
if (observer == null) {
return;
}
observers.remove(observer);
}
// 实现删除所有观察者的方法
public void removeAll() {
observers.clear();
}
}
/**
* 观察者接口
*/
interface Observer {
// 继承Observer的类需要实现update方法
void update(ObservedObject obj);
}
/**
* 被观察者具体实现
*/
class ConcreteObject extends ObservedObject {
private String info;
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
for (Observer observer : observers) {
observer.update(this);
}
}
}
/**
* 观察者具体实现
*/
class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void update(ObservedObject obj) {
System.out.println(name + "先生您好,您的最新消息更新如下:\n" + ((ConcreteObject)obj).getInfo());
}
}
/**
* 主类,用于测试
*/
public class Main {
public static void main(String[] args) {
// 创建被观察的对象
ConcreteObject observer = new ConcreteObject();
// 创建四个观察者对象
ConcreteObserver obja = new ConcreteObserver("张三丰");
ConcreteObserver objb = new ConcreteObserver("麻师娘");
ConcreteObserver objc = new ConcreteObserver("李小龙");
ConcreteObserver objd = new ConcreteObserver("太上老君");
// 将观察者加入被观察的对象列表
observer.add(obja);
observer.add(objb);
observer.add(objc);
observer.add(objd);
//更新被观察者的相关信息
observer.setInfo("今天天气晴朗,蓝天白云,适合外出,可以带上你们的情侣出门游玩哦!");
}
}
打开App,阅读手记