zoukankan      html  css  js  c++  java
  • 职责链模式

    一、简介

    1、当客户提交一个请求时,请求沿着链传递直到有一个管理者对象处理它。

    2、UML

    3、所属类别:行为型

    二、程序

      1 // 职责链模式.cpp : 定义控制台应用程序的入口点。
      2 //
      3 
      4 #include "stdafx.h"
      5 #include<iostream>
      6 #include<string>
      7 using namespace std;
      8 class Request
      9 {
     10 public:
     11     string requesttype;
     12     Request(string s)
     13     {
     14          requesttype=s;
     15     }
     16     ~Request(){}
     17 };
     18 //管理者抽象类
     19 class Manager
     20 {
     21 public:
     22     Manager* super_manager;//本级管理者的上一级管理者
     23     Manager(){}
     24     virtual ~Manager(){}
     25     virtual void requestapplication(Request *)=0;
     26 };
     27 //具体的管理者
     28 class Xiangmujingli :public Manager
     29 {
     30 public:
     31     Xiangmujingli(){}
     32     virtual ~Xiangmujingli(){}
     33     virtual void requestapplication(Request *r)
     34     {
     35         cout<<"我是项目经理,";
     36         if(r->requesttype=="请假")
     37         {
     38             cout<<"你的请求,我准了"<<endl;
     39         }
     40         else
     41         {
     42             cout<<"你的请求我无权管理"<<endl;
     43             super_manager->requestapplication(r);
     44         }
     45     }
     46 };
     47 //具体的管理者
     48 class Zongjingli :public Manager
     49 {
     50 public:
     51     Zongjingli(){}
     52     virtual ~Zongjingli(){}
     53     virtual void requestapplication(Request *r)
     54     {
     55         cout<<"我是总经理,";
     56         if(r->requesttype=="加薪")
     57         {
     58             cout<<"你的请求,我准了"<<endl;
     59         }
     60         else
     61         {
     62             cout<<"你的请求我无权管理"<<endl;
     63             super_manager->requestapplication(r);
     64         }
     65     }
     66 };
     67 //具体的管理者
     68 class CEO :public Manager
     69 {
     70 public:
     71     CEO(){}
     72     virtual ~CEO(){}
     73     virtual void requestapplication(Request *r)
     74     {
     75         cout<<"我是CEO,";
     76         if(r->requesttype=="入股")
     77         {
     78             cout<<"你的请求,我准了"<<endl;
     79         }
     80         else
     81         {
     82             cout<<"你的请求我无权管理"<<endl;
     83             super_manager->requestapplication(r);
     84         }
     85     }
     86 };
     87 
     88 int _tmain(int argc, _TCHAR* argv[])
     89 {
     90     Request *request=new Request("加薪");
     91     //实例化所有管理者
     92     Xiangmujingli* xiangmujingli=new Xiangmujingli();
     93     Zongjingli *zongjingli=new Zongjingli();
     94     CEO * ceo=new CEO();
     95     //设置上下级关系
     96     xiangmujingli->super_manager=zongjingli;
     97     zongjingli->super_manager=ceo;
     98     //寻找最下级的管理者
     99     xiangmujingli->requestapplication(request);
    100     return 0;
    101 }
  • 相关阅读:
    LeetCode20 有效的括号
    函数的多个参数
    定义一个函数的基本语法 函数的参数
    函数
    金字塔
    水仙花数
    百鸡百钱
    循环demo
    while适用于不确定循环次数
    浏览器打断点
  • 原文地址:https://www.cnblogs.com/bewolf/p/4257281.html
Copyright © 2011-2022 走看看