大家好,现在有这么一个需求,请教一下有没有好的实现办法。
需求描述:
1、ClassA产生事件,可能有多种类型,例如:订单创建、订单付款、订单评价。。。等。
2、有许多类需要知道ClassA产生的事件中的一种或多种类型。例如:ClassB想知道ClassA产生的订单创建、订单评价这两个事件。
3、应该怎么实现?我现在的做法是:
Class A {
List<ClassAListener> listeners = new ArrayList<>();
void produceEvent(String a){
if(a == 订单创建){
foreach(listeners as l){
l.onCreated();
}else if(a == 订单付款){
foreach(listeners as l){
l.onPay();
}
}
}
}
}
然后让ClassB继续ClassAListener,重写onCreated、onPay等方法。
描述的可能不太清楚,大家都是高手应该可能看懂我的意思,有问题请留言。
谢谢大家了。
import java.util.*;
public class A
{
//全部监听
private Map<String, List<ListenerClassA>> listenerMap = new HashMap<String, List<ListenerClassA>>();
//添加
public void addListener(String action, ListenerClassA lisenter){
if(lisenter==null){
return;
}
List<ListenerClassA> listeners = listenerMap.get(action);
if(listeners==null){
listeners = new ArrayList<ListenerClassA>();
listenerMap.put(action, listeners);
}
listeners.add(lisenter);
}
//发布事件
public void produceEvent(String action){
List<ListenerClassA> listeners = listenerMap.get(action);
if(listeners==null){
return;
}
for(ListenerClassA lisenter : listeners ){
lisenter.execute(this);
}
}
}
//监听者
interface ListenerClassA
{
public void execute(A a);
}
Class A产生事件,可能有多种类型,例如:订单创建、订单付款、订单评价。。。等。
将这些内容做成全局静态变量字符串或者枚举类,会更加好些。
以上是我想到的实现方式。仅供参考