最近给团队里的程序员们分了个等级,模仿着阿里的那套模式,将我们团队里人分为P6/P7/P8/P9/P10。 但是这样会有个什么问题呢?其实也没啥问题,就是这好像不需要用类,直接在场景main里面放一堆的if来判断就好了。 所以,我们采用这样一个方法:创建一个责任类,将各级程序员按等级排序,当有任务来临时,依次向后,如果能接那就接了,轮到最后还没人接,那就退了,默认没人接。 这,就是责任链模式。 这个图是很简单的嘞: 这是一段防爬虫文字,读者可跳过 发现我上一篇写错了,毕竟上一篇是初学,然后刚刚遇到个bug,好烦,我就纳闷儿了,补全函数名就把括号也补上啊,乱七八糟,不想补全就别补啊,补一半,害我找了两个小时。 将请求和处理分开。 有俩劣势非常明显:1、性能问题。2、调试不方便。 链中节点数量需要控制,避免出现超长链的情况。可以通过设置阈值的方式来加以限制。 这个模式融合了模板方法模式,在应用之中要灵活。P6级程序员
来活儿的时候呢,就这样分配,根据难度初步估计,分配给对应的等级的程序员去做,难度等级7级就给P7,8级就给P8。
那如果分配到当前等级的人他不收呢?那就得移交到下一个等级去,这要是用ifelse来判断,可想而知代码将会有多么的拥挤。
而且将本不属于场景类的任务强加到场景类之中,似乎也不合情理。
本文为ImapBox作者“看,未来”原创,我的ImapBox地址为 https://lion-wu.blog.csdn.net/
本篇隶属于我的专栏 – 《设计模式 之 设计模式进阶》https://blog.csdn.net/qq_43762191/category_10059121.html
作者版权,未经允许,禁止转载。代码实现
#include<iostream> using namespace std; //抽象任务类 class abstractRW { public: virtual int get_diff() = 0; //获取任务等级 virtual string get_RW() = 0; //获取任务内容 }; //具体任务类 class RW:public abstractRW{ protected: int diff = 0; string str = " "; public: RW(int diff, string str) { this->diff = diff; this->str = str; } int get_diff() { return this->diff; } //设置任务等级 string get_RW() { return this->str; } //设置任务内容 }; //任务分配类 class handle { private: int level = 5; handle* nexthandle; protected: virtual void respon(abstractRW* rw) = 0; public: handle(int l) { this->level = l; } void handleMessage(abstractRW* rw) { if (rw->get_diff() == this->level) this->respon(rw); else { if (this->nexthandle != NULL) this->nexthandle->handleMessage(rw); else cout << "没人接" << endl; } } void setNext(handle* h) { this->nexthandle = h; } }; class P6 :public handle { public: P6(int lev) :handle(lev){} //继承写法 void respon(abstractRW* rw) { cout << rw->get_RW() << " P6接了" << endl; } }; class P7 :public handle { public: P7(int lev) :handle(lev) {} void respon(abstractRW* rw) { cout << rw->get_RW() << " P7接了" << endl; } }; class P8 :public handle { public: void respon(abstractRW* rw) { cout << rw->get_RW() << " P8接了" << endl; } }; int main() { abstractRW* rw = new RW(7,"没事儿"); handle* h6 = new P6(6); handle* h7 = new P7(7); h6->setNext(h7); h6->handleMessage(rw); return 0; } 感悟
应用场景
优势
请求者可以不知道是谁处理了,处理者也不用知道请求者的全貌。
两者解耦,提高系统的灵活性。劣势
注意事项
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
官方软件产品操作指南 (170)