浅谈常用的架构模式( 二 )

测试:
public class PipelineTest {@Testpublic void test() {Pipeline pipeline = new Pipeline(new IntegerSource());pipeline.start();}}执行结果:

Integer-Source receive 1 return 1
Incr-Channel receive 1 return 2
String-Channel receive 2 return str2
String-Sink receive str2 return null
 
事件驱动架构
浅谈常用的架构模式

文章插图
事件驱动模式
事件驱动是以某个具体事件为触发条件,从而贯穿这个处理流程 。通常事件驱动属于发布订阅模式或观察者模式,用于异步处理,解耦业务逻辑 。具体实现有进程内的和分布式的方式,比如:EventBus, MQ等等 。
 
代码举例:
public class OrderEventListener implements Listener<OrderEvent> {@Overridepublic void onEvent(OrderEvent event) {System.out.println("receive event: " + event);}}public class EventBus {private final static List<Listener> listeners = new ArrayList<>();/***注册监听器* @param listener*/public static void registerListener(Listener listener) {listeners.add(listener);}/***发布事件* @param event*/public void publishEvent(Event event) {// 收到并处理事件listeners.forEach(l -> {l.onEvent(event);});}}测试:
public class EventBusTest {@Testpublic void publish() {OrderEvent event = new OrderEvent("order_2", OrderState.PENDING_PAYMENT);EventBus.registerListener(new OrderEventListener());EventBus eventBus = new EventBus();eventBus.publishEvent(event);}}Spring中也有事件发布和监听(深入浅出Spring/SpringBoot 事件监听机制):
@Componentpublic class OrderEventListener{@Async@EventListener(OrderEvent.class)public void onEvent(OrderEvent event) {System.out.println("receive event: " + event);}}public class EventTest {@Autowiredprivate ApplicationContext context;@Testpublic void publishEvent() {OrderEvent event = new OrderEvent("order_1", OrderState.PENDING_PAYMENT);context.publishEvent(event);}} 
总结以上通过代码实例简单说明了工作中常用到的架构模式,但是模式不是固定的,工作中需结合实际情况按需使用即可 。

【浅谈常用的架构模式】


推荐阅读