设计模式:chain of responsibility模式
2024-09-07 18:01:13
目的:弱化发出请求的对象和处理请求对象的之间的关系
理解:每个处理请求的对象仅仅只关注自己能处理的请求,不关系其他请求
优点:
- 无需一个管理类来匹配所有的请求,更灵活
- 责任链可以动态的调整
- Andorid中事件处理框架就使用了责任链模式
继承关系图:
例子:
class Trouble
{
int num;
public:
Trouble(int num)
{
this->num = num;
} int getNum()
{
return num;
}
};
class Handler
{
string name;
Handler* next;
public:
Handler(string name)
{
this->name = name;
next = NULL;
} Handler* setNext(Handler* next)
{
this->next = next;
return next;
} void handler(Trouble* t)
{
if(resolve(t))
{
cout << "Trouble num = " << t->getNum() << " is solve by " << name << endl;
}
else if(next != NULL)
{
next->handler(t);
}
else
{
cout << "Trouble num = " << t->getNum() << " can't solve" << endl;
}
} virtual bool resolve(Trouble* t)
{
return false;
}
}; class LittleHandler: public Handler
{
public:
LittleHandler(string name) : Handler(name)
{
} virtual bool resolve(Trouble* t)
{
bool ret = false; if(t->getNum() < 10)
{
ret = true;
} return ret;
}
}; class BiggerHandler: public Handler
{
public:
BiggerHandler(string name) : Handler(name)
{
} virtual bool resolve(Trouble* t)
{
bool ret = false; if(t->getNum() > 10)
{
ret = true;
} return ret;
}
};
int main()
{
Handler* h = new Handler("handler");
LittleHandler* lh = new LittleHandler("littleHandler");
BiggerHandler* bh = new BiggerHandler("biggerHandler");
h->setNext(lh)->setNext(bh); Trouble* t1 = new Trouble(5);
h->handler(t1); Trouble* t2 = new Trouble(15);
h->handler(t2); return 0;
}
最新文章
- 防火墙防DDOS攻击的简单设置
- CSS3妙用
- Hanoi问题
- Sum of Left Leaves
- OpenCV 绘制图像直方图
- Ubuntu安装Fcitx(小企鹅五笔输入法)
- Python 中的 TK编程
- asp.net上传大文件
- linux file命令小记
- LIS算法
- Python新式类与经典类的区别
- 【转】Shell执行MySql操作
- Appium系列文章(1)获取appPackage和appActivity
- 使用springboot actuator监控应用
- Gym 100712
- Mysql高级查询 内连接和外连接详解
- apacheh2.4和php5.5集成环境遇到的问题
- Azure 认知服务 (3) 计算机视觉API - 分析图像,使用C#代码
- [转]Greenplum 资源隔离的原理与源码分析
- MySQL存储引擎中的MyISAM和InnoDB