明天你会感谢今天奋力拼搏的你。
ヾ(o◕∀◕)ノヾ
public class HelloSubject implements MySubject {
private List<ObServer> obServerList = new ArrayList<ObServer>();
@Override
public void attach(ObServer obServer) {
obServerList.add(obServer);
}
@Override
public void detach(ObServer obServer) {
obServerList.remove(obServer);
}
@Override
public void notify(String message) {
for (int i = 0; i < obServerList.size(); i++) {
ObServer obServer = obServerList.get(i);
// 调用该方法通知 获取具体的消息
obServer.update(message);
}
}
}
如上只是一个示例,没有做多线程处理,notify传入的参数实际中可以改成json对象、Map等。
JDK中观察者模式实现:
jdk中以Observable作为主题类,Observer作为观察者的接口。
如下所示,Observable已经实现了对观察者的各项操作方法。
有一点需注意,如下图所示,在通知观察者的方法中,changed变量如果为false则会返回,所以在调用通知方法前,先需要调用setChanged()方法。
如下所示,可以继承Observable类,重写notifyObservers方法。
public class MessageObServable extends Observable {
@Override
public void notifyObservers(Object arg) {
// 1.修改状态为可以群发
setChanged();
// 2.调用父类的notifyObservers 群发消息
super.notifyObservers(arg);
}
}
观察者类实现Observer接口,在update方法中实现业务逻辑即可,arg为notifyObservers传递过来的参数。
public class MessageObServer implements Observer {
public void update(Observable o, Object arg) {
System.out.println("用户下单成功,发送邮件提醒内容:" + arg);
}
}
注册和发送通知的代码如下:
public class TestJdkObServer {
public static void main(String[] args) {
// 1.创建具体的主题
Observable observable = new MessageObServable();
// 2. 注册观察者
observable.addObserver(new MessageObServer());
// 3.群发消息
observable.notifyObservers("Hello,你好啊!");
}
}
全部评论