package com.test;
public interface IBaseListener {
}
package com.test;
public interface OnXListener extends IBaseListener {
public void onXyes();
public void onXno();
public static class AbsOnXListener implements OnXListener {
@Override
public void onXyes() {
}
@Override
public void onXno() {
}
}
}
package com.test;
public interface OnYListener extends IBaseListener {
public void onYyes(String s);
public void onYno(String s);
public static abstract class AbsOnYListener implements OnYListener {
@Override
public void onYyes(String s) {
}
@Override
public void onYno(String s) {
}
}
}
package com.test;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
public class ListenerHolder {
private static Set<OnXListener> sXListeners = new CopyOnWriteArraySet<OnXListener>();
private static Set<OnYListener> sYListeners = new CopyOnWriteArraySet<OnYListener>();
@SuppressWarnings({ "unchecked" })
public static <T extends IBaseListener> void callListeners(Class<T> clz, IListenerExecutor<T> executor) {
if (OnXListener.class.isAssignableFrom(clz)) {
for (OnXListener listener : sXListeners) {
executor.execute((T) listener);
}
} else if (OnYListener.class.isAssignableFrom(clz)) {
for (OnYListener listener : sYListeners) {
executor.execute((T) listener);
}
}
}
public static void addListener(IBaseListener listener) {
if (listener instanceof OnXListener) {
sXListeners.add((OnXListener) listener);
}
if (listener instanceof OnYListener) {
sYListeners.add((OnYListener) listener);
}
}
public static void removeListener(IBaseListener listener) {
if (listener instanceof OnXListener) {
sXListeners.remove(listener);
}
if (listener instanceof OnYListener) {
sYListeners.remove(listener);
}
}
public static void clear() {
sXListeners.clear();
sYListeners.clear();
}
public static interface IListenerExecutor<T extends IBaseListener> {
public void execute(T listener);
}
}
package com.test;
import com.test.ListenerHolder.IListenerExecutor;
public class Test {
public static void main(String[] args) {
// 触发监听器
final String s = "abc";
ListenerHolder.callListeners(OnYListener.class, new IListenerExecutor<OnYListener>() {
@Override
public void execute(OnYListener listener) {
listener.onYyes(s);
}
});
}
// 添加监听器
public void addListener(IBaseListener listener) {
ListenerHolder.addListener(listener);
}
// 移除监听器
public void removeListener(IBaseListener listener) {
ListenerHolder.removeListener(listener);
}
}