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("今天天气晴朗,蓝天白云,适合外出,可以带上你们的情侣出门游玩哦!");
}
}
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦