单例模式+观察者模式,实现事件总线。
直接上代码:
import java.util.ArrayList;
import java.util.List;
/**
* 消息通知
* Created by zhouzhengwei on 2018/1/25.
*/
public class MessageBus {
private List<Callback> mObservers;
private MessageBus(){
mObservers = new ArrayList<>();
}
public static MessageBus getInstance(){
return SingleEvent.INSTANCE.getInstance();
}
private static enum SingleEvent{
INSTANCE;
private MessageBus messageBus;
private SingleEvent(){
messageBus = new MessageBus();
}
public MessageBus getInstance(){
return messageBus;
}
}
//注册
public void register(MessageBus.Callback callback){
if (callback == null){
return;
}
synchronized (this) {
if (!mObservers.contains(callback)){
mObservers.add(callback);
}
}
}
//移除
public synchronized void remove(MessageBus.Callback callback) {
mObservers.remove(callback);
}
//发送消息
public void send(String msg) {
for (MessageBus.Callback observer : mObservers) {
observer.excute(msg);
}
}
interface Callback{
public void excute(String msg);
}
public static void main(String[] arg){
MessageBus messageBus = MessageBus.getInstance();
MessageBus.Callback callback = new Callback() {
@Override
public void excute(String msg) {
System.out.print(msg);
}
};
messageBus.register(callback);
MessageBus.getInstance().send("6666666666");
}