package com.cheng.bestpractice.observer.observer.impl; import com.cheng.bestpractice.observer.observer.i.IEventObserver; import com.cheng.bestpractice.observer.observer.i.IEventSubject; import java.util.ArrayList; import java.util.List; /** * 具体的主题角色的实现,这里用来监听事件的发生,采用单例模式来实现 */ public class EventSubject implements IEventSubject { private List<IEventObserver> mEventObservers=new ArrayList<IEventObserver>(); private static volatile EventSubject mEventSubject; private EventSubject(){ } public synchronized static EventSubject getInstance(){ if(mEventSubject ==null){ mEventSubject =new EventSubject(); } return mEventSubject; } @Override public void registerObserver(IEventObserver observer) { synchronized (mEventObservers){ if(observer!=null){ if(mEventObservers.contains(observer)){ return; } mEventObservers.add(observer); } } } @Override public void removeObserver(IEventObserver observer) { synchronized (mEventObservers){ int index = mEventObservers.indexOf(observer); if (index >= 0) { mEventObservers.remove(observer); } } } @Override public void notifyObserver(String eventType) { if(mEventObservers!=null && mEventObservers.size()>0 && eventType!=null){ for(IEventObserver observer : mEventObservers){ observer.dispatchChange(eventType); } } } }