石家庄网站建设费用,做外贸网站需要注册公司吗,重庆住房和城乡建设厅网站首页,wordpress仿静态基本概念
责任链模式#xff08;Chain of Responsibility Pattern#xff09;是一种行为型设计模式#xff0c;将请求沿着处理链传递#xff0c;直到有一个对象能够处理为止。
实现的模块有#xff1a;
Handler#xff08;处理者#xff09;#xff1a;定义一个处理…基本概念
责任链模式Chain of Responsibility Pattern是一种行为型设计模式将请求沿着处理链传递直到有一个对象能够处理为止。
实现的模块有
Handler处理者定义一个处理请求的接口。ConcreteHandler具体处理者实现了处理者接口判断自己是否能够处理请求如果不能将请求传递给下一个处理者。Request请求封装了请求的信息通常作为处理者方法的参数传递。
使用场景
当需要将请求的发送者和接收者进行解耦时。当有多个对象可以处理同一请求但不确定哪个对象应该处理时。当需要动态指定处理请求的顺序时。
实现
QT源码事件系统
QT的事件处理系统同样用到了事件处理系统其中事件通过事件队列发送到对应的对象每个对象都可以处理该事件如果该对象无法处理将会发给下一个对象。
以下是 QAppliaction 发送鼠标事件给 QWidget 的部分源码
//接收鼠标事件的对象w
QWidget* w static_castQWidget *(receiver);
//鼠标事件e
QMouseEvent* mouse static_castQMouseEvent*(e);......while (w) {//创建一个新的鼠标事件对象用于在对象树中传播鼠标事件QMouseEvent me(mouse-type(), relpos, mouse-windowPos(), mouse-globalPos(),mouse-button(), mouse-buttons(), mouse-modifiers(), mouse-source());......//如果鼠标事件被接受打破循环eventAccepted (w receiver ? mouse : me)-isAccepted();if (res eventAccepted)break;......//如果鼠标事件未被接受将w设置为w的父组件继续循环w w-parentWidget();
}
可以看出 QApplication 将鼠标事件沿着对象树传递直到有一个对象能够处理为止符合责任链模式的思想其中
QObjectHandler处理者定义一个处理鼠标事件的接口。QWidgtConcreteHandler具体处理者实现了 QObject 的接口判断自己是否能够处理鼠标事件如果不能将请求传递给父类 QWidget。QMouseEventRequest请求封装了鼠标事件的信息。QAppliaction客户端是请求的发起者。