观察者模式的基本原理是,您将有一个主题,该主题将向其广播已注册的对象(谁是观察者)将被通知
--
制作一个将由您的观察者实施的以下界面。
public interface Observer {
void update(String incident, String position);
}
制作另一个接口,该接口将由必须广播消息的主题实现
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
让你的类修改谁的对象将通知其他观察者对象
public class YourBroadCastObjectData implements Subject {
private ArrayList<Observer> observers;
private String incident;
private String position;
public YourBroadCastObjectData() {
// TODO Auto-generated constructor stub
observers = new ArrayList<>();
}
@Override
public void notifyObservers() {
// TODO Auto-generated method stub
for (int i = 0; i < observers.size(); i++) {
Observer observer = observers.get(i);
observer.update(this.incident, this.position);
}
}
@Override
public void registerObserver(Observer observer) {
// TODO Auto-generated method stub
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
// TODO Auto-generated method stub
int i = observers.lastIndexOf(observer);
if (i >= 0) {
observers.remove(i);
}
}
public void dataChanged() {
notifyObservers();
}
public void setData(String incident, String position) {
this.incident= incident;
this.position= position;
dataChanged();
}
public float getIncident() {
return incident;
}
public float getPosition() {
return position;
}
}
据我所知,您将有一个异步线程将数据从 RabbitMQ 服务获取到您的应用程序,在该线程中让您的主题通知所有对象。
你必须为你的类实现观察者接口,你想充当观察者的对象。在线查看一些示例以了解观察者模式的工作原理。
Java 提供了对观察者模式的内置支持,但它是您必须继承的具体类。
为了提供更灵活的设计,您最好根据需要制作自己的图案。
以上代码将帮助您推送数据(示例..事件和位置),但您也可以制作拉模式
当您要实现 RabbitMQ 时,您必须有一些数据在服务器上不断更新,并且您的消费者代码已连接到服务器上的 RabbitMQ 服务的生产者。
一旦您从消费者代码中获取数据,您就可以将任何类作为主体 (YorBroadCastObjectData) 来实现 SUbject,并且该对象会将数据发送给观察者对象。
在让观察者对象引用您的主体对象时,您的观察者对象可以将其自己注册为主体对象的观察者