栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【软件设计师中级】责任链模式学习笔记(c++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【软件设计师中级】责任链模式学习笔记(c++)

目录

1、责任链模式chain of responsibility

(1)意图

(2)结构

(3)适用性

2、根据UML编写代码

(1) 泛化关系

(2)关联关系

(3)将UML代入生活

3、代码实现


1、责任链模式chain of responsibility

(1)意图

使多个对象有机会处理请求,从而避免请求的发送者和接受者之间耦合关系,将这些对象形成一个链,并沿着这条链传递请求,直到一个对象处理他为止。

 (2)结构

handler定义一个处理请求的接口:(可选)实现后继者

concretehandler处理它的请求:可访问她的后继者,如果可处理该请求,就处理他,否则就请求转发给后继者。

client向链上的具体处理者(concretehandler)对象提供请求 

(3)适用性

有多个对象处理一个请求,那个对象处理该请求运行时刻自动确定。

想不在明确制定接受的情况下向多个对象中一个提交一个请求。

可处理要给请求对象集合应被动态制定

2、根据UML编写代码

   (1) 泛化关系

     结构中hangler作为父类有两个具体子类(concretehandler1、concretehandler2),由两个子类具体实现对应的操作。

(2)关联关系

   在不考虑客户端的情况handler有个自关联,简而言之就是在自己的内部生成一个指向自己的指针,注意该指针在后续的操作中将提供给子类使用,原则上放在protected下。

(3)将UML代入生活

这个结构相对非常简单,该结构的理解我们可以用一个公司的报销例子完成:

   张三她昨天请甲方吃了一顿饭,请甲方吃饭的费用报销需要财务部长和总经理两人同意,报销流程大致如下:首先张三填写好报销单拿给财务部长审核,财务部长在验证发票和报销填写无误后,提交给总经理,总经理在根据她个人判断决定要不要给张三报销。

 

     这个过程非常清晰,财务部长只能在自己职责范围作出处理,他无法处理的事务就需要提交更高权限的人来审核。

3、代码实现
#include
#include 
using namespace std;
class handler{
    public:
        handler(){}
        virtual  void handlerequest()=0;
        virtual ~handler(){}
    protected:
        handler *next;//自关联

};

class concretehandler2:public handler{
    public:
        void handlerequest(){
            cout<<"请总经理审批Y/N"<handlerequest();
            }else{
                cout<<"财务审批不过"<handlerequest();
    delete a;
    return 0;
}

输出结果: 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002110.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号