您的位置:首页 > 娱乐 > 明星 > 网站策划软件_深圳网站设计互联网品牌_制作app平台需要多少钱_制造业中小微企业

网站策划软件_深圳网站设计互联网品牌_制作app平台需要多少钱_制造业中小微企业

2024/12/23 14:13:09 来源:https://blog.csdn.net/sc_o_r_pio/article/details/144183043  浏览:    关键词:网站策划软件_深圳网站设计互联网品牌_制作app平台需要多少钱_制造业中小微企业
网站策划软件_深圳网站设计互联网品牌_制作app平台需要多少钱_制造业中小微企业

定义:使得多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。

外部使用时将这些对象练成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止

应用场景:类似审批请假流程

优点:降低耦合度,简化对象,增强给对象指派职责的灵活性

缺点:增加新的请求处理类很方便,但是不能保证你的请求一定会被接受

步骤:

1、定义抽象处理者,定义处理请求的接口,且内部含有指向本类的指针,提供get和set方法

set方法可以将处理者连接起来

2、继承实现具体的处理者

3、外部使用时需要先组装责任链

---------------------------------------------------------------------------------------------------------------------------------

以请假为例,向提交给A处理,A无法处理则交给B,B无法处理则交给C处理

//1、抽象处理者
class Leader {
public:virtual ~Leader() = default;//3、提供setter和gettervoid setNext(Leader* p){next = p;}Leader* getNext() const{return next;}//4、声明纯虚接口  处理请求virtual void handleRequest(int days) = 0;private://2、内部持有指向本类的指针Leader* next;
};//具体的处理者1
class Handler1 :public Leader
{
public://重写处理函数void handleRequest(int days) override{//请假天数小于3天,则同意请假if (days < 3){cout << "1号处理者同意请假" << endl;}else{//如果请假天数超出了3天,就让下一个人处理者处理auto next = getNext();if (next){//继续调用下一个处理者的handleRequest接口next->handleRequest(days);}else{cout << "请假天数太多" << endl;}}}};//具体的处理者2
class Handler2 :public Leader
{
public://重写处理函数void handleRequest(int days) override{//请假天数小于5天,则同意请假if (days < 5){cout << "2号处理者同意请假" << endl;}else{//如果请假天数超出了5天,就让下一个人处理者处理auto next = getNext();if (next){next->handleRequest(days);}else{cout << "请假天数太多" << endl;}}}};//具体的处理者3
class Handler3 :public Leader
{
public://重写处理函数void handleRequest(int days) override{//请假天数小于10天,则同意请假if (days <10 ){cout << "3号处理者同意请假" << endl;}else{//如果请假天数超出了10天,就让下一个人处理者处理auto next = getNext();if (next){next->handleRequest(days);}else{cout << "请假天数太多" << endl;}}}};int main()
{//外部使用:Leader* handle1 = new Handler1();Leader* handle2 = new Handler2();Leader* handle3= new Handler3();//1、先组装责任链handle1->setNext(handle2);handle2->setNext(handle3);//2、然后调用请求处理接口,让请求从第一个处理者传递下去,直到被处理int day = 8;handle1->handleRequest(day);return 0;
}

总结:

责任链模式就是将这些处理者连成一条链。

链上的每个处理者都有一个成员变量来保存下一个处理者

除了处理请求外, 处理者还负责沿着链传递请求, 请求会在链上移动, 直至所有处理者都有机会对其进行处理

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com