package org.ntlab.radishforandroidstudio.framework.subject; import android.view.InputEvent; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import org.ntlab.radishforandroidstudio.framework.event.MyEvent; import org.ntlab.radishforandroidstudio.framework.listener.MyListener; /** * Listenerへイベントを通知するクラス * * @author s.iwatani * @param <ListenerType> リスナの型 * @param <EventType> イベントを保存する型 */ public abstract class MySubject<ListenerType extends MyListener, EventType extends MyEvent> { protected Set<ListenerType> listenerSet = new CopyOnWriteArraySet<>(); public MySubject() {} /** * リスナを追加する * * @author s.iwatani * @param listener */ public void addListener(ListenerType listener) { listenerSet.add(listener); } /** * 指定したリスナを削除する * * @author s.iwatani * @param listener */ public void removeListener(ListenerType listener) { listenerSet.remove(listener); }; /** * リスナをすべて削除する * * @author s.iwatani */ public void clearListener() { listenerSet.clear(); }; /** * イベントを通知する * * @author s.iwatani * @param event イベントの情報を保存したもの */ public void notifyListeners(EventType event) { for (ListenerType listener : listenerSet) { listener.onEvent(event); } } }