设计模式---行为类型---职责链
来源:互联网 发布:网络安利是什么意思 编辑:程序博客网 时间:2024/05/16 23:55
1、意图
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
2、适用性
在以下条件下使用Responsibility链:
1)有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2)你想在不明确指定接受者的情况下,向多个对象中的一个提交一个请求。
3)可处理一个请求的对象集合应被动态指定。
3、C++实例
// Test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;typedef int Topic;const Topic NO_HELP_TOPIC = -1;const Topic PRINT_TOPIC = 1;const Topic PAPER_ORIENTATION = 2;const Topic APPLICATIOIN_TOPIC = 3;// 基类class HelpHandler{public:HelpHandler(HelpHandler * = 0, Topic = NO_HELP_TOPIC );virtual bool HasHelp();virtual void SetHandler( HelpHandler *, Topic );virtual void HandleHelp();private:HelpHandler *_successor;Topic _topic;};HelpHandler::HelpHandler( HelpHandler *h, Topic t ):_successor(h),_topic(t){}bool HelpHandler::HasHelp(){return _topic != NO_HELP_TOPIC;}void HelpHandler::HandleHelp(){if ( 0 != _successor ){_successor->HandleHelp();}}void HelpHandler::SetHandler( HelpHandler *h, Topic t){_successor = h;_topic = t;}class Widget:public HelpHandler{protected:Widget( Widget *parent, Topic t = NO_HELP_TOPIC );private:Widget *_parent;};Widget::Widget( Widget *w, Topic t /*= NO_HELP_TOPIC */ ):HelpHandler(w,t){_parent = w;}class Button:public Widget{public:Button(Widget *d, Topic t = NO_HELP_TOPIC );virtual void HandleHelp();};Button::Button( Widget *h, Topic t /*= NO_HELP_TOPIC */ ):Widget( h, t){}void Button::HandleHelp(){if ( HasHelp() ){cout<<"Button::HandleHelp"<<endl;}else{HelpHandler::HandleHelp();}}class Dialog:public Widget{public:Dialog(HelpHandler *d, Topic t = NO_HELP_TOPIC );virtual void HandleHelp();};Dialog::Dialog( HelpHandler *h, Topic t /*= NO_HELP_TOPIC */ ):Widget( 0 ){SetHandler( h, t );}void Dialog::HandleHelp(){if ( HasHelp() ){cout<<"Dialog::HandleHelp"<<endl;}else{HelpHandler::HandleHelp();}}class Application:public HelpHandler{public:Application( Topic t ):HelpHandler( 0, t ){}virtual void HandleHelp();};void Application::HandleHelp(){cout<<"Application::HandleHelp"<<endl;}int _tmain(int argc, _TCHAR* argv[]){Application *application = new Application( APPLICATIOIN_TOPIC );Dialog *dialog = new Dialog( application, PRINT_TOPIC );Button *button = new Button( dialog, PAPER_ORIENTATION );button->HandleHelp();button->SetHandler( dialog, NO_HELP_TOPIC );button->HandleHelp();delete button;delete dialog;delete application;return 0;}
0 0
- 设计模式---行为类型---职责链
- 设计模式-行为-职责链
- 【JavaScript设计模式】行为型设计模式--职责链模式
- 设计模式学习-行为模式-职责链模式
- 设计模式 - 行为型模式 - 职责链模式
- 设计模式笔记(20)---职责链模式(行为型)
- 设计模式19:职责链模式【行为型】
- java设计模式(行为型)之职责链模式
- 设计模式:行为模式:职责链(chain of responsibility)
- 【设计模式】行为模式之Chain of Responsibility职责链
- 设计模式深入学习--Chain of Responsibility 职责链模式职责链模式(行为型模式)
- 行为模式-职责链模式
- 行为模式-职责链模式
- 行为型模式-职责链
- 职责链模式-对象行为模式
- 行为型模式之职责链模式
- [设计模式笔记]三. 行为型模式--15.Chain Of Responsibility(职责链模式)(一)
- [设计模式笔记]三. 行为型模式--15.Chain Of Responsibility(职责链模式)(二)
- A Neural Probabilistic Language Model
- Android .gitignore
- 线程池
- 心理学的入门
- mfc学习笔记之如何修改mfc消息机制处理顺序
- 设计模式---行为类型---职责链
- 在Java中如何高效的判断数组中是否包含某个元素
- ASP.NET Core 和 NLog 集成
- Java 优雅的终止线程
- linux raw socket
- 用C语言实现九九乘法表
- Android Animation实战之屏幕底部弹出PopupWindow
- 解决SecureCRT超时自动断开的问题
- Java烧脑驴游(六)--修饰符