责任链

Chain of Responsibility 模式也叫责任链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来完成同一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。
结构图
这里写图片描述
具体应用
软件窗口的消息传递。
servlet容器的过滤器(Fliter)框架实现
eg:
现需要造车,造车分为三部分:早车头,造车身,造车尾。利用职责连实现。
算法实现:
基类:

class Handle{
private:
    Handle *next;
public :
    Handle(Handle *next){
        this->next = next;
    }
    virtual void HandleRequest(){
        if (next){
            next->HandleRequest();
        }

    }
    virtual ~Handle(){
        cout << "基类析构函数" << endl;
        if (next){
              next->~Handle();
        }

    }
};

造车头类:

class ConcreteHandleHead :public Handle{
public :
    ConcreteHandleHead(Handle *next) :Handle(next){};
    void HandleRequest(){
        cout << "造车头" << endl;
        Handle::HandleRequest();
    }
    ~ConcreteHandleHead(){
        cout << "造车头析构函数执行" << endl;
    }
};

造车身类:

class ConcreteHandleBody :public Handle{
public:
    ConcreteHandleBody(Handle *next) :Handle(next){};
    void HandleRequest(){
        cout << "造车身" << endl;
        Handle::HandleRequest();
    }
    ~ConcreteHandleBody(){
        cout << "造车身析构函数执行" << endl;
    }
};

造车尾类:

class ConcreteHandleTail :public Handle{
public:
    ConcreteHandleTail(Handle *next) :Handle(next){};
    void HandleRequest(){
        cout << "造车尾" << endl;
        Handle::HandleRequest();
    }
    ~ConcreteHandleTail(){
        cout << "造车尾析构函数执行" << endl;
    }
};

客户端:

int main(void){
    ConcreteHandleTail *pt = new ConcreteHandleTail(NULL);
    ConcreteHandleBody *pb = new ConcreteHandleBody(pt);
    ConcreteHandleHead *ph = new ConcreteHandleHead(pb);
    ph->HandleRequest();
    delete ph;

    return 0;
}

调试结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值