事件通知模板
事件通知与观察者模式类似,参照《Java软件体系结构设计模式标准指南》P258,代码https://github.com/birdstudiocn/design-patterns-example/tree/master/src/38
事件接口
public interface Listener {void listen(T event, S result);
}
事件容器类
public class OrderedComposite {private List unordered = new ArrayList();private List ordered = new ArrayList();private Comparator super S> comparator = new AnnotationAwareOrderComparator();private List list = new ArrayList();/*** Public setter for the listeners.* * @param items*/public void setItems(List extends S> items) {unordered.clear();ordered.clear();for (S s : items) {add(s);}}/*** Register additional item.* * @param item*/public void add(S item) {if (item instanceof Ordered) {if (!ordered.contains(item)) {ordered.add(item);}} else if (AnnotationUtils.isAnnotationDeclaredLocally(Order.class, item.getClass())) {if (!ordered.contains(item)) {ordered.add(item);}} else if (!unordered.contains(item)) {unordered.add(item);}Collections.sort(ordered, comparator);list.clear();list.addAll(ordered);list.addAll(unordered);}/*** Public getter for the list of items. The {@link Ordered} items come* first, followed by any unordered ones.* * @return an iterator over the list of items*/public Iterator iterator() {return new ArrayList(list).iterator();}/*** Public getter for the list of items in reverse. The {@link Ordered} items* come last, after any unordered ones.* * @return an iterator over the list of items*/public Iterator reverse() {ArrayList result = new ArrayList(list);Collections.reverse(result);return result.iterator();}}
事件注册类
public class CompositeListener implements Listener {private OrderedComposite> listeners = new OrderedComposite>();/*** Public setter for the listeners.** @param itemReadListeners*/public void setListeners(List extends Listener super T, ? super S>> listeners) {this.listeners.setItems(listeners);}/*** Register additional listener.** @param itemReaderListener*/public void register(ProcessListener super T, ? super S> listener) {listeners.add(listener);}/*** Call the registered listeners in reverse order, respecting and* prioritising those that implement {@link Ordered}.* * @see org.springframework.batch.core.ProcessListener#afterProcess(java.lang.Object,* java.lang.Object)*/@Overridepublic void listen(T item, S result) {for (Iterator> iterator = listeners.reverse(); iterator.hasNext();) {Listener super T, ? super S> listener = iterator.next();listener.listen(item, result);}}
}
事件目标实现类,Observable
public class ConcreteListenSubject {private CompositeListener, BaseResult> listener = new CompositeListener, BaseResult>();public void registerListener(ProcessListener, BaseResult> listener) {this.listener.register(listener);}public ResultVO process(VO vo) throws Exception {BaseEvent event = new BaseEvent(vo,resultVO);listener.afterProcess(event, result);return resultVO;}
}
事件观察实现,Observer
ConcreteListenSubject subject=new ConcreteListenSubject ();
subject.registerListener(new Listener() {@Overridepublic void listen(Object event, Object result) {// TODO Auto-generated method stub }
});
转载于:https://www.cnblogs.com/birdstudio/p/7477522.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
