当前位置: 首页 > news >正文

免费建设微网站制作2024免费网站推广大全

免费建设微网站制作,2024免费网站推广大全,各省备案网站,做h游戏视频网站【声明】本题目来源于卡码网(卡码网KamaCoder) 【提示:如果不想看文字介绍,可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是责任链模式(第21种设计模式) 责任链模式是⼀种行为型设计模式&am…

【声明】本题目来源于卡码网(卡码网KamaCoder)

【提示:如果不想看文字介绍,可以直接跳转到C++编码部分


设计模式大纲】


【简介】

        --什么是责任链模式(第21种设计模式)

        责任链模式是⼀种行为型设计模式,它允许你构建⼀个对象链,让请求从链的⼀端进⼊,然后沿着链上的对象依次处理,直到链上的某个对象能够处理该请求为止。

        职责链上的处理者就是⼀个对象,可以对请求进⾏处理或者将请求转发给下⼀个节点,这个场景在⽣活中很常⻅,就是⼀个逐层向上递交的过程,最终的请求要么被处理者所处理,要么处理不了,这也因此可能导致请求⽆法被处理。


 【组成结构】

        责任链模式包括以下几个基本结构:

  • 1. 处理者Handler :定义⼀个处理请求的接⼝,包含⼀个处理请求的抽象⽅法和⼀个指向下⼀个处理者的链接。
  • 2. 具体处理者ConcreteHandler : 实现处理请求的⽅法,并判断能否处理请求,如果能够处理请求则进⾏处理,否则将请求传递给下⼀个处理者。
  • 3. 客户端:创建并组装处理者对象链,并将请求发送到链上的第⼀个处理者


 【简易实现 - Java】

        以Java代码作以简要说明

1. 处理者

        定义处理请求的接口

interface Handler {// 处理请求的⽅法void handleRequest(double amount);// 设置下⼀个处理者的⽅法void setNextHandler(Handler nextHandler);
}

2. 具体处理者

        实现处理请求

class ConcreteHandler implements Handler {private Handler nextHandler;@Overridepublic void handleRequest(Request request) {// 根据具体情况处理请求,如果⽆法处理则交给下⼀个处理者if (canHandle(request)) {// 处理请求的逻辑} else if (nextHandler != null) {// 交给下⼀个处理者处理nextHandler.handleRequest(request);} else {// ⽆法处理请求的逻辑}}@Overridepublic void setNextHandler(Handler nextHandler) {this.nextHandler = nextHandler;}// 具体处理者⾃⼰的判断条件private boolean canHandle(Request request) {// 根据具体情况判断是否能够处理请求return /* 判断条件 */;}
}

3. 客户端

        创建并组装处理者对象链,将请求发送给链上第⼀个处理者

public class Main {public static void main(String[] args) {// 创建处理者实例Handler handler1 = new ConcreteHandler();Handler handler2 = new ConcreteHandler();// ...// 构建责任链handler1.setNextHandler(handler2);// ...// 发送请求Request request = new Request(/* 请求参数 */);handler1.handleRequest(request);}
}

【使用场景】

        责任链模式具有下⾯⼏个优点:

  • 降低耦合度:将请求的发送者和接收者解耦,每个具体处理者都只负责处理与⾃⼰相关的请求,客户端不需要知道具体是哪个处理者处理请求。
  • 增强灵活性:可以动态地添加或删除处理者,改变处理者之间的顺序以满⾜不同需求。

        但是由于⼀个请求可能会经过多个处理者,这可能会导致⼀些性能问题,并且如果整个链上也没有合适的处理者来处理请求,就会导致请求⽆法被处理。
        责任链模式是设计模式中简单且常⻅的设计模式,在⽇常中也会经常使⽤到,⽐如Java开发中过滤器的链式处理,以及Spring框架中的拦截器,都组装成⼀个处理链对请求、响应进⾏处理。


【C++编码部分】

1. 题目描述

        小明所在的公司请假需要在OA系统上发布申请,整个请求流程包括多个处理者,每个处理者负责处理不同范围的请假天数,如果一个处理者不能处理请求,就会将请求传递给下一个处理者,请你实现责任链模式,可以根据请求天数找到对应的处理者。

        审批责任链由主管(Supervisor), 经理(Manager)和董事(Director)组成,他们分别能够处理3天、7天和10天的请假天数。如果超过10天,则进行否决。

2. 输入描述

        第一行是一个整数N(1 <= N <= 100), 表示请求申请的数量。接下来的N行,每行包括一个请求申请的信息,格式为"姓名 请假天数"。

3. 输出描述

        对于每个请假请求,输出一行,表示该请求是否被批准。如果被批准/否决,输出被哪一个职级的人批准/否决。

4. C++编程示例(可直接运行)

/**
* @version Copyright (c) 2024 NCDC, Servo。 Unpublished - All rights reserved
* @file DutyChainMode.hpp
* @brief 责任链模式
* @autor 写代码的小恐龙er
* @date 2024/01/25
*/#include <iostream>
#include <string>using namespace std;// 前置声明// 用户请求类
class LeaveRequest;//  处理者 接口类
class LeaveHandler;
// 具体处理者1 -- 主管(Supervisor) 3
class Supervisor;
// 具体处理者2 -- 经理(Manager) 7 
class Manager;
// 具体处理者3 -- 董事(Director) 10
class Director;// 具体定义// 用户请求类
class LeaveRequest
{
//成员数据
private:string _name;int _daysLeave = 0;
// 成员函数
public://构造函数LeaveRequest(string name, int days){this->_name = name;this->_daysLeave = days;}// 成员数据获取接口string GetName(){return this->_name;}int GetDaysLeave(){return this->_daysLeave;}
};//  处理者 接口类
class LeaveHandler
{
// 接口
public:virtual void HandleRequest(LeaveRequest *request) = 0;
};// 具体处理者1 -- 主管(Supervisor) 3
class Supervisor : public LeaveHandler
{
//成员数据
private:const int _maxDays = 3;// 下一个处理者LeaveHandler *_nextHandler;
// 接口函数重载
public:// 构造函数Supervisor(){}Supervisor(LeaveHandler *nextHandler){this->_nextHandler = nextHandler;}void HandleRequest(LeaveRequest *request) override {if(request){if(request->GetDaysLeave() <= _maxDays){std::cout << request->GetName() << " Approved by Supervisor." << endl;}else if(_nextHandler){_nextHandler->HandleRequest(request);}else std::cout << request->GetName() << " Denied by Supervisor." << endl;}}
};// 具体处理者2 -- 经理(Manager) 7 
class Manager : public LeaveHandler
{
//成员数据
private:const int _maxDays = 7;// 下一个处理者LeaveHandler *_nextHandler;
// 接口函数重载
public:// 构造函数Manager(){}Manager(LeaveHandler *nextHandler){this->_nextHandler = nextHandler;}void HandleRequest(LeaveRequest *request) override {if(request){if(request->GetDaysLeave() <= _maxDays){std::cout << request->GetName() << " Approved by Manager." << endl;}else if(_nextHandler){_nextHandler->HandleRequest(request);}else std::cout << request->GetName() << " Denied by Manager." << endl;}}
};// 具体处理者3 -- 董事(Director) 10
class Director : public LeaveHandler
{
//成员数据
private:const int _maxDays = 10;// 下一个处理者const LeaveHandler *_nextHandler = nullptr;
// 接口函数重载
public:// 构造函数Director(){}// Director(LeaveHandler *nextHandler){//     this->_nextHandler = nextHandler;// }void HandleRequest(LeaveRequest *request) override {if(request){if(request->GetDaysLeave() <= _maxDays){std::cout << request->GetName() << " Approved by Director." << endl;}// else if(_nextHandler){//     _nextHandler->HandleRequest(request);// }else std::cout << request->GetName() << " Denied by Director." << endl;}}
};int main()
{// 请求数量int requestNum = 0;std::cin >> requestNum;// 创建请求命令基类LeaveRequest *request = nullptr;// 创建处理者基类 -- 【创建处理流程时 也可单独创建一个类】LeaveHandler *director = new Director();LeaveHandler *manager = new Manager(director);LeaveHandler *supervisor = new Supervisor(manager);// 遍历for(int i = 0; i < requestNum; i++){// 请假者姓名 和 天数string name = "";int days = 0;// 输入std::cin >> name >> days;// 新建请求类request = new LeaveRequest(name, days);// 开始处理请求supervisor->HandleRequest(request);}//析构delete director;director = nullptr;delete manager;manager = nullptr;delete supervisor;supervisor = nullptr;if(request != nullptr){delete request;request = nullptr;}return 0;
}


......

To be continued.

http://www.tj-hxxt.cn/news/5876.html

相关文章:

  • 网站规划的类型广州疫情已经达峰
  • 网站建设公司经营爱网站关键词挖掘工具
  • 苏州网站搭建公司网站策划
  • 网络监控管理系统搜索引擎优化策略包括
  • 网站建设需要哪些软件建站模板网站
  • 成立一个网站软件需要多少钱百度搜索推广怎么做
  • 国外做婚纱的网站商城小程序开发哪家好
  • 网站的关键词搜索怎么做奇零seo赚钱培训
  • 网络推广平台联系昔年下拉手机seo百度点击软件
  • wordpress打开html文件下载搜索引擎seo外包
  • 如何选择网站目标关键词搜狗引擎搜索
  • 专门做资产负债表结构分析的网站官网seo关键词排名系统
  • 长沙建网站需要多少钱百度怎么推广自己的网站
  • 做360全景有什么网站搜狐视频
  • 网站建设属于什么360推广联盟
  • 最好网站建设公司运营团队发外链的网址
  • 网站推广究竟应该怎么做目前主流搜索引擎是哪种
  • 公司做网站价格贵阳网站优化公司
  • 企业网站能提供哪些服务华为手机业务最新消息
  • 做筹款的网站需要什么资质淘宝关键词搜索工具
  • 权威网站发布平台seo推广怎么做视频教程
  • 网页设计创建站点教程网站客服
  • 国内外贸网站网站推广公司排行榜
  • 中山营销网站建设联系方式智慧营销系统平台
  • 网站申请免费优化软件下载
  • 卡片式网站模板下载宁德市房价
  • 网站开发的费用属于什么科目站长统计入口
  • 宜兴网站建设哪家好河北企业网站建设
  • 木材网站建设哪家好百度地图网页版
  • 做网站国内阿里云虚拟主机多少钱登录百度账号