实现一个消息队列
生产端
- 继承 Xxx extends Observable
- instance.addObserver(Consumer.getInstance()); 增加消费端监听
- 发消息 super.setChanged();
super.notifyObservers(messageData);
import java.util.Observable;
public class Producer extends Observable {
private Producer() {}
public static Producer instance=null;
public static Producer getInstance(){
if (instance == null){
synchronized(Producer.class) { //1
if (instance == null) {
instance = new Producer(); //3
instance.addObserver(Consumer.getInstance());
}
}
}
return instance;
}
public void sendMessage(MessageData messageData) {
System.out.println("发消息="+messageData);
super.setChanged();
super.notifyObservers(messageData);
}
}
消费端
- Xxxx implements Observer
- 重写 public void update(Observable o, Object arg) {
import java.util.Observable;
import java.util.Observer;
public class Consumer implements Observer {
private Consumer() {}
public static Consumer instance;
public static Consumer getInstance() {
if (instance == null) {
synchronized (Consumer.class) {
if (instance == null) {
instance = new Consumer();
}
}
}
return instance;
}
@Override
public void update(Observable o, Object arg) {
if (arg instanceof MessageData) {
MessageData messageData = (MessageData) arg;
if (MessageData.MessageType.productType == messageData.getMessageType()) {
Object data = messageData.getData();
System.out.println("收到了消息 data="+data);
}
}
}
}
调用例子
public static void main(String[] args) {
MessageData<String> messageData = new MessageData<>();
messageData.setMessageType(MessageData.MessageType.productType);
messageData.setData("aaaa");
Producer.getInstance().sendMessage(messageData);
}