30.3 事件触发器的开发(观察者模式+中介者模式)
30.3.1 场景介绍
(1)有一产品它有多个触发事件(如创建事件、修改、删除),如创建文本框时触发OnCreate事件,修改时触发onChange事件,双击时触发onDblClick事件。
(2)当产品触发事件时,会创建相应的产品事件对象(ProductEvent),并将这个事件对象传递给观察者,以便通知观察者该事件的发生。
(3)观察者实现上是一个事件的分发者,相当于中介模式中的中介对象,会把这个事件分发者相应的事件处理对象。
30.3.2 类图
(1)事件的观察者:作为观察者模式中的观察者角色,接收观察期望完成的任务,在这个框架中主要用来接收ProductEvent事件。
(2)事件分发者:作为中介者模式中的中介者角色,它担当着非常重要的任务——分发事件,并同时协调各个同事类(也就是事件的处理者)处理事件。
(3)抽象事件处理者:相当于中介者模式中的抽象同事类。为每个事件处理者定义能够处理事件的级别,但定义与中介者交互的接口(exec)
【编程实验】事件触发器
//Classes.h
#pragma once //**************************************辅助类******************** //产品事件类型 enum ProductEventType { NEW_PRODUCT = 1, DEL_PRODUCT = 2, EDIT_PRODUCT = 3, CLONE_PRODUCT = 4 }; //事件处理类型 enum EventHandlerType { NEW = 1, DEL = 2, EDIT =3, CLONE = 4 }; typedef void Object; //事件对象类(主要用来记录触发事件的源对象) class EventObject { Object* source; //记录事件源对象 public: EventObject(Object* source) { this->source = source; } Object* EventSource() { return source; } };