职责链模式 Responsibility

职责链模式:

对于一个请求,自己处理不了的,交于上级处理,形成了一个职责链,依次交于上级处理

// Responsibility.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <STRING>
using namespace std;

class Business{
public:
    void setprice(int price){
        m_price = price;
    }
    int getprice(){
        return m_price;
    }
protected:
    int m_price;
};

class Manager{
public:
    Manager(string name):m_name(name){}
    virtual void handle(Business * bus) = 0;
    void setsuper(Manager * other){
        this->super = other;
    }
    virtual ~Manager(){}
protected:
    string m_name;
    Manager * super;
};

class TownManager:public Manager{
public:
    TownManager(string name):Manager(name){}
    void handle(Business * bus){
        if(bus->getprice() < 10000){
            cout<<this->m_name<<" handle "<<bus->getprice()<<endl;
        }
        else{
            if(bus != NULL){
                this->super->handle(bus);
            }
        }
    }
};

class CityManager:public Manager{
public:
    CityManager(string name):Manager(name){}
    void handle(Business * bus){
        if(bus->getprice() < 20000){
            cout<<this->m_name<<" handle "<<bus->getprice()<<endl;
        }
        else{
            if(bus != NULL){
                this->super->handle(bus);
            }
        }
    }
};

class CountryManager:public Manager{
public:
    CountryManager(string name):Manager(name){}
    void handle(Business * bus){
        if(bus->getprice() < 30000){
            cout<<this->m_name<<" handle "<<bus->getprice()<<endl;
        }
        else{
            if(bus != NULL){
                cout<<this->m_name<<" 有点麻烦"<<endl;
            }
        }
    }
};

int main(int argc, char* argv[])
{
    Manager * ptown = new TownManager("镇公司");
    Manager * pcity = new CityManager("市公司");
    Manager * pcoun = new CountryManager("国家公司");
    ptown->setsuper(pcity);
    pcity->setsuper(pcoun);

    Business * pbusiness = new Business;
    int array[3] = {5000,15000,25000};
    for(int i  = 0;i<3;i++){
        pbusiness->setprice(array[i]);
        ptown->handle(pbusiness);
    }

    delete ptown;
    delete pcity;
    delete pcoun;
    delete pbusiness;
    return 0;
}
时间: 2024-11-09 21:43:59

职责链模式 Responsibility的相关文章

(20):(行为型模式) Chain Of Responsibility 职责链模式

(20):(行为型模式) Chain Of Responsibility 职责链模式,布布扣,bubuko.com

atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换

atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3. 调用代码 2 4. 责任链链的特性: 2 5. 模式结构 4 6. 职责链模式包含如下角色:Handler,ConcreteHandler: 具体处理者,HandlerChainUtil ,Client 4 7. 设置哈一个handler,,两个法:排序法,指定法 5 1. 指定法 5 2. 排

设计模式19:Chain Of Responsibility 职责链模式(行为型模式)

Chain Of Responsibility 职责链模式(行为型模式) 请求的发送者与接受者 某些对象请求的接受者可能有多种多样,变化无常…… 动机(Motivation) 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合. 如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而使两者解耦. 意图(Intent) 使多个对象都有机会处理请求,从而避免请求的发送者和接受者

职责链模式(Chain of Responsibility)

详解 定义 为了避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止,职责链模式又称为责任链模式,它是一种对象行为型模式.(如果你接触过异常处理,那么套用异常处理机制可以更好地理解). 职责链可以是一条直线,也可以是一个环,还可以是一个树形结构,不过最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传递,由链上的处理者对请求进行

Chain of Responsibility - 职责链模式

定义 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合度. 案例 比如现在有一个图形界面,它包括一个应用Application类,一个主窗口Window,一个按钮Button,Window和Button都是继承自Widget类,现在在Button上按滑动鼠标滚轮,Button类不一定要处理,可能是Window类处理,也可能是是Application类处理,每一个类只处理自己关心的,从一个链式结构,以此查看是否要处理: 每一个对象都有处理事件的权利,当不处理的时候就会交给父对象处

设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)

 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就推卸给另外个一个部门(对象).至于究竟谁来解决问题呢?政府部门就是为了能够避免屁民的请求与官员之间耦合在一起,让多个(部门)对象都有可能接收请求,将这些(部门)对象连接成一条链,而且沿着这条链传递请求.直到有(部门)对象处理它为止. 样例1:js的事件浮升机制 样例2: 2.问题 假设有多个对象都有

职责链模式(Chain of Responsibility)的Java实现

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用场景: 1.有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定: 2.在不明确指定接收者的情况下,向多个对象中的一个提交一个请求: 3.处理一个请求的对象集合应被动态指定. 在大学里面当班干部,时常要向上级申请各方面的东西.譬如申请全班外出秋游,普通同学将申请表交给班长,班

设计模式之职责链模式(Chain of Responsibility)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些详细的类的信息封装起来.第二,它们隐藏了这些类的实例是怎样被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,

行为型设计模式之职责链模式(Chain of Responsibility)

结构 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可处理一个请求的对象集合应被动态指定. 1 using System; 2 3 abstract class Handler 4 { 5 protected Handler successorHand