博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之责任链模式
阅读量:6994 次
发布时间:2019-06-27

本文共 2424 字,大约阅读时间需要 8 分钟。

设计模式是前人、大牛等在实际编程中对遇到的问题解决方案的抽象,也就是每一个设计模式都在编程实例中有体现。

1.责任链模式在编程中的小体现,看下面的情况:

(1)if else if ....

1 if(a<12){ 2     ... 3 } 4 else if (a<25){ 5     ... 6 } 7 else if(a<67){ 8     ... 9 }10 else{11     ...12 }
View Code

(2)switch case

1 switch(a)2 {3     case 1:     ;break;4     case 2:     ;break;5     case 3:     ;break;6     default:    7 }
View Code

(3)链表next

1 typedef struct node2 {3     int value;4     struct node *next;5 }TreeNode;
View Code

 上面的三种情况中,共同特点就是必须依次扫描每个分支进行判断,找到对应的分支进行处理。(C++、Java中switch也是要遍历每个分支的)

2.责任链模式的定义

  责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。

  责任链模式的重点在“链”上,有一条链去处理相似的请求在链中决定由谁去处理这个请求,并返回相应的结果。

  在1中的3个例子中,第一个if、switch、Tree root节点就相当于“链的入口”,当每个分支都要进行复杂的业务逻辑处理时,使用责任链模式比较好。

3.责任链模式简单实例

  设计模式是不分语言的。虽然Java提供特有机制对应的关键字,如clone(原型模式)、Observable(观察者模式)等。但是其他语言也可以实现这些,只可能是机制不同而已。

 责任链模式C++实例代码:

(1)Handler类是其他具体处理类A、B、D类的父类,提供抽象,公共代码。

(2)代码建立责任链A->B->D。(责任链末尾必须是默认处理类,也即switch中的default部分)

1 #include
2 using namespace std; 3 class Handler{ ///处理类抽象 4 public: 5 Handler(int _value):value(_value){} ///设置自身能够处理的编号 6 virtual ~Handler(){} 7 void setNextHandler(Handler *_nextHandler){ ///设置后继处理者 8 this->nextHandler=_nextHandler; 9 }10 virtual void putHandlerMesg(int _value)=0; ///处理者实现进行具体的处理过程11 12 int value;13 Handler *nextHandler;14 };15 16 class A:public Handler{ ///处理类A17 public:18 A(int _value):Handler(_value){};19 ~A(){};20 void putHandlerMesg(int _value){21 cout<<"A handler this command:"<<_value<
value == handlerValue){47 tmp->putHandlerMesg(handlerValue);48 break;49 }50 else if(tmp->value == 0)51 {52 tmp->putHandlerMesg(handlerValue);53 break;54 }55 else{56 tmp=tmp->nextHandler;57 }58 }59 }60 61 int main(){62 ///建立处理链,a(1)->b(2)->d(0,default)63 Handler *a=new A(1);64 Handler *b=new B(2);65 Handler *d=new D(0);66 a->setNextHandler(b);67 b->setNextHandler(d);68 69 ///处理的两个例子70 MainHandle(2,a);71 MainHandle(4,a);72 delete(a);73 delete(b);74 delete(d);75 }
View Code

 4.责任链模式的优缺点

4.1责任链模式的优点

  实现了请求者与处理者代码分离:发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。提高系统的灵活性和可扩展行。

4.2责任链模式的缺点

  每次都是从链头开始:这也正是链表的缺点。你也许会想到一种貌似不错的解决方案,比如使用hash映射,将要处理的请求id与处理类对象关联,但是这样系统损失了可扩展性。

转载地址:http://wqwvl.baihongyu.com/

你可能感兴趣的文章
Android开机自启动程序
查看>>
php弱类型
查看>>
vim
查看>>
【转载】MapReduce编程 Intellij Idea配置MapReduce编程环境
查看>>
安装配置管理 之 Fedora 6.0 蓝牙bluebooth传送文件的问题解决方法
查看>>
C 结构
查看>>
spring 加载不了jdbc.properties文件的数据问题
查看>>
JQuery Plugin 2 - Passing Options into Your Plugin
查看>>
长尾分布(幂律分布)
查看>>
Android提高--索引
查看>>
队列(Queue)-c实现
查看>>
DevExpress控件使用系列--ASPxGridView+Popup+Tab
查看>>
MySql5.7配置文件my.cnf设置
查看>>
set names utf8;
查看>>
异常处理
查看>>
go学习之文件读取问题(需更新)
查看>>
quartus15.1 下程程序 电脑蓝屏 解决方法
查看>>
利用c:forEach标签遍历数组
查看>>
Java集合List随堂
查看>>
HDU_1542_线段树【扫描线】
查看>>