第二十四章 加薪非要老总批--责任链模式(读书模式)

AD22等长布线规则 本文介绍了PCB布线中实现信号线等长的详细操作步骤:1.创建网络类(NetClass),将需要等长的信号线归入同一组;2.设置高速布线规则(High-SpeedRule),定义等长容差等参数;3.进行交互式等长布线(InteractiveLengthTuning),使用蛇形线调整线长;4.实时调整与最终检查,确保所有网络满足等长要求。文中还提供了实用技巧,如使用快捷键调整蛇形线参数、为关键信号设置更严格规则等。操作需在PCB设计软件中完成,通过统一管理、规则设置和精确调整来实现信号同步传输。 阅读详情

第24章 加薪非要老总批--责任链模式

24.1 老板,我要加薪!
 今天小菜向经理提加薪申请,经理没权利,然后向总监上报,总监也没有权利,向总经理上报。其实这个就是一个责任链了。

24.2 加薪代码初步

#pragma once
#include "Request.h"
#include <iostream>

class Manager
{
public:
	typedef enum _TypeManager
	{
		eManager,
		eMajordomo,
		eMasterManager
	}TypeManagerLevel;

	Manager(std::string str)
	{
		m_name = str;
	};

	void GetResult(TypeManagerLevel level, Request* req)
	{
		if (level == eManager)//经理
		{
			if (req->GetRequestType() == Request::eLeave && req->GetRequestNumber() <= 2)
			{
				std::cout << m_name << ":"
					<< req->GetRequestContent()
					<< "悢検" << req->GetRequestNumber()
					<< "嫋壜偡傞" << std::endl;
			}
			else
			{
				std::cout << m_name << ":"
					<< req->GetRequestContent()
					<< "请假" << req->GetRequestNumber()
					<< "请假被批准" << std::endl;
			}
		} 
		else if (level == eMajordomo)//总监
		{
			if (req->GetRequestType() == Request::eLeave && req->GetRequestNumber() <= 5)
			{
				std::cout << m_name << ":"
					<< req->GetRequestContent()
					<< "请假" << req->GetRequestNumber()
					<< "请假被批准" << std::endl;
			}
			else
			{
				std::cout << m_name << ":"
					<< req->GetRequestContent()
					<< "请假" << req->GetRequestNumber()
					<< "我无权处理" << std::endl;
			}			
		}
		else if (level == eMasterManager)//总经理
		{
			if (req->GetRequestType() == Request::eLeave)
			{
				std::cout << m_name << ":"
					<< req->GetRequestContent()
					<< "请假" << req->GetRequestNumber()
					<< "请假被批准" << std::endl;
			}
			else if ( req->GetRequestType() == Request::eRaises && req->GetRequestNumber() <= 500 )
			{
				std::cout << m_name << ":"
					<< req->GetRequestContent()
					<< "加薪" << req->GetRequestNumber()
					<< "加薪被批准" << std::endl;
			} 
			else if ( req->GetRequestType() == Request::eRaises && req->GetRequestNumber() > 500 )
			{
				std::cout << m_name << ":"
					<< req->GetRequestContent()
					<< "加薪" << req->GetRequestNumber()
					<< "加薪数量再说吧" << std::endl;
			}
		}
	};
protected:
	std::string m_name;
};
#pragma once
#include <string>

class Request
{
public:
	typedef enum _TypeRequest
	{
		eLeave,			//离职
		eRaises			//涨薪水
	}TypeRequest;
public:
	void SetRequestType(TypeRequest type)
	{
		m_RequestType = type;
	};
	void SetRequestContent(std::string str)
	{
		m_RequestContent =str;
	};
	void SetRequestNumber(int num)
	{
		m_Number = num;
	};

	TypeRequest GetRequestType(void)
	{
		return m_RequestType;
	};
	std::string GetRequestContent(void)
	{
		return m_RequestContent;
	};
	int GetRequestNumber(void)
	{
		return m_Number;
	};
private:
	//要求的类型
	TypeRequest m_RequestType;
	//要求的内容
	std::string m_RequestContent;
	//要求的数量
	int m_Number;
};

客户端

// DesignPattern24.2.cpp : 僐儞僜乕儖 傾僾儕働乕僔儑儞偺僄儞僩儕 億僀儞僩傪掕媊偟傑偡丅
//

#include "stdafx.h"
#include "Manager.h"

int _tmain(int argc, _TCHAR* argv[])
{
	//三个管理者
	Manager* jinli = new Manager("jinli");
	Manager* zongjian = new Manager("zongjian");
	Manager* zongjinli = new Manager("zongjinli");

	Request* requset = new Request();
	requset->SetRequestType(Request::eRaises);
	requset->SetRequestContent("小菜要求加薪.");
	requset->SetRequestNumber(1000);

	//不同级别对此进行的反馈
	jinli->GetResult(Manager::eManager, requset);
	zongjian->GetResult(Manager::eMajordomo, requset);
	zongjinli->GetResult(Manager::eMasterManager, requset);

	Request* requset2 = new Request();
	requset2->SetRequestType(Request::eLeave);
	requset2->SetRequestContent("小菜要请假.");
	requset2->SetRequestNumber(3);

	jinli->GetResult(Manager::eManager, requset2);
	zongjian->GetResult(Manager::eMajordomo, requset2);
	zongjinli->GetResult(Manager::eMasterManager, requset2);

	delete jinli;
	delete zongjian;
	delete zongjinli;
	delete requset2;
	delete requset;
	return 0;
}

经理,总监,总经理都是管理者,他们在对申请处理时,需要做出判断。其实这样做并不好,那个管理者类中,里面的"结果"方法比较长,加上有太多的分支判断,这其实是非常不好的设计。这个"管理者"类承担了太多的责任,这违背了单一职责原则,因为如果增加新的管理类别,就需要修改这个类了。也违背了开放-封闭原则。

24.3 职责链模式
 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。这里发出这个请求的客户端并不知道这当中的哪一个对象最终处理这个请求,这样系统的更改可以在不影响客户端的情况下动态地重新组织和分配责任。

 

#pragma once
#include <iostream>

class Handler
{
public:
	//设置继任者
	void SetSuccessor(Handler* p)
	{
		this->m_successor = p;
	};
	//处理请求的抽象方法
	virtual void HandlerRequest(int req) = 0;

	virtual ~Handler(){};
protected:
	Handler* m_successor;
};

class ConcreteHandler1 : public Handler
{
	void HandlerRequest(int req)
	{
		if (req >= 0 &&  req < 10)
		{
			std::cout << "ConcreteHandler1:处理请求"
				<< req << std::endl;
		} 
		else if (m_successor != NULL)
		{//转移到下一位
			m_successor->HandlerRequest(req);
		}
	};
};

class ConcreteHandler2 : public Handler
{
	void HandlerRequest(int req)
	{
		if (req >= 10 && req < 20)
		{
			std::cout << "ConcreteHandler2:处理请求"
				<< req << std::endl;
		} 
		else if (m_successor != NULL)
		{//转移到下一位
			m_successor->HandlerRequest(req);
		}
	};
};

class ConcreteHandler3 : public Handler
{
	void HandlerRequest(int req)
	{
		if (req >= 20 && req < 30)
		{
			std::cout << "ConcreteHandler3:处理请求"
				<< req << std::endl;
		} 
		else if (m_successor != NULL)
		{//转移到下一位
			m_successor->HandlerRequest(req);
		}
	};
};

 Handler类,定义一个处理请示的接口。
 ConcreteHandler类,具体处理着类,处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理之,否这就将该请求转发给它的后继者。
 ConcreteHandler1类:当请求数在0到10之间则有权处理,否则转到下一位。
 ConcreteHandler2类:当请求数在10到20之间则有权处理,否则转到下一位。
 ConcreteHandler3类:当请求数在20到30之间则有权处理,否则转到下一位。

客户端程序

// DesignPattern24.3.cpp
#include "stdafx.h"
#include "Handle.h"

int _tmain(int argc, _TCHAR* argv[])
{
	Handler* h1 = new ConcreteHandler1();
	Handler* h2 = new ConcreteHandler2();
	Handler* h3 = new ConcreteHandler3();

	//设置责任链的上家和下家
	h1->SetSuccessor(h2);
	h2->SetSuccessor(h3);

	int requests[] = {2, 5, 14, 22, 18, 3, 27, 20 };

	for ( int i = 0; i < _countof(requests); i++ )
	{
		h1->HandlerRequest(requests[i]);
	}

	delete h1;
	delete h2;
	delete h3;
	return 0;
}

24.4 职责链的好处
 当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它。这样做的好处就是请求者不用去管哪个对象来处理请求了。
 接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需要保持一个指向其后继者的引用,而不需保持它所有的候选接受者的引用,这样就大大降低了耦合度了。但也有一种可能,一个请求极有可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理。回到24.2的例子,其实写的管理者类当中的那些分支,分解到每一个具体的管理者类当中,然后利用事先设置的后继者来实现请求处理的权限问题。

24.5 加薪代码重构
 
 

#pragma once
#include "Request.h"
#include <iostream>
//管理者
class Manager
{
public:
	Manager(Manager* p)
	{
		m_pManager = p;
	};

	Manager(std::string str)
	{
		m_Name = str;
	};
	
	void SetManagers(Manager* p)
	{
		m_pManager = p;
	}

	virtual void RequestAppcation(Request* req) = 0;
	virtual ~Manager(){};
protected:
	std::string m_Name;
	//管理者的上级
	Manager* m_pManager;
};

//经理
class CommonManager :public Manager
{
public:
	CommonManager(std::string str)
		:Manager(str)
	{
	};

	void RequestAppcation(Request* req)
	{
		if ( req->GetRequestType() == Request::eLeave )
		{
			std::cout << m_Name << ":"
				<< req->GetRequestContent()
				<< "请假" << req->GetRequestNumber()
				<< "被批准" << std::endl;
		} 
		else
		{
			if ( m_pManager != NULL )
			{
				m_pManager->RequestAppcation(req);
			}
		}
	};
};


//总监
class Majordomo :public Manager
{
public:
	Majordomo(std::string str)
		:Manager(str)
	{
	};

	void RequestAppcation(Request* req)
	{
		if ( req->GetRequestType() == Request::eLeave && req->GetRequestNumber() < 5 )
		{
			std::cout << m_Name << ":"
				<< req->GetRequestContent()
				<< "请假" << req->GetRequestNumber()
				<< "被批准" << std::endl;
		} 
		else
		{
			if ( m_pManager != NULL )
			{
				m_pManager->RequestAppcation(req);
			}
		}
	};
};

//总经理
class GeneralManager :public Manager
{
public:
	GeneralManager(std::string str)
		:Manager(str)
	{
	};

	void RequestAppcation(Request* req)
	{
		if ( req->GetRequestType() == Request::eLeave )
		{
			std::cout << m_Name << ":"
				<< req->GetRequestContent()
				<< "请假" << req->GetRequestNumber()
				<< "被批准" << std::endl;
		}
		else if ( req->GetRequestType() == Request::eRaises && req->GetRequestNumber() <= 500 )
		{
			std::cout << m_Name << ":"
				<< req->GetRequestContent()
				<< "加薪" << req->GetRequestNumber()
				<< "被批准" << std::endl;
		}
		else if ( req->GetRequestType() == Request::eRaises && req->GetRequestNumber() > 500 )
		{
			std::cout << m_Name << ":"
				<< req->GetRequestContent()
				<< "加薪" << req->GetRequestNumber()
				<< "不被批准" << std::endl;
		}
		else
		{
			if ( m_pManager != NULL )
			{
				m_pManager->RequestAppcation(req);
			}
		}
	};
};

 我们把原来的一个"管理者"类改成了一个抽象类和三个具体类,此时类之间的灵活性就大大增加了,如果我们需要扩展新的管理者类别,只需要增加子类就可以了。

24.6 加薪成功
 小菜加薪成功.

大中型超市收银系统(可直接运行) 光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开 立即下载

相关推荐

C/C++ 计算程序运行的时间

C/C++计算程序执行时间的方法,精度依次增加,推荐度也依次增加 1.#include <time.h> clock_t start, finish; double process_interval ; start=clock(); process(); //要计时的程序 finish=clock(); process_interval =(double)(finish-star...

stu_shanghui的博客 1020

大话设计模式--第24章 加薪非要老总批?——责任链模式

第24章 加薪非要老总批?——责任链模式     ¥:度娘:¥[责任链模式]是一种¥[设计模式]。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下¥[动态]地重新¥[组织]和¥[分配]责任。  

静静燃烧的雪的专栏 437

Claude Code vs Codex

Claude Code 提供了一个生产就绪(production-ready)的实现,包含良好的错误处理、优雅的关闭逻辑、详细注释和文档,以及内置测试。Claude Code 输出了一个可运行的 Next.js + TypeScript 前端,但错过了一些设计里的黄色主题元素;Codex 则生成自己的版本,没有导出设计中的图片,也没严格遵照设计主题。Codex 完成同样功能,但更简洁直接,文档和注释少一些但功能达标。任务都用同样的提示,使用 TypeScript 实现,并在一天内完成。

weixin_49869937的博客 2387

C++ 设计模式 十二:责任链模式 (读书 现代c++设计模式)

责任链模式的核心思想责任链模式允许将多个处理对象(Handler)链接成链,请求沿链传递,直到被某个处理对象处理。其核心是解耦请求发送者和接收者,支持动态调整处理逻辑。何时需要使用责任链模式?责任链模式的核心应用场景是动态组织多个对象处理同一请求多级处理逻辑请求需要经过多个处理者按顺序处理,且处理者的顺序或组合可能动态变化。示例:审批流程(员工→经理→CEO)、HTTP中间件链、异常处理链。解耦请求与处理者客户端无需知道具体由哪个对象处理请求,只需将请求提交到链的起点。

Duramentee的博客 2251

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤 1.背景及问题 最近在使用自动化学报latex模板写作业时,一只对latex搞不清楚,网上关于各种版本的latex下载了一堆(比如ctex中文套装方案的各个版本及texlive+texstudio方案,中间还升级了miktex,windet等),发现都未能成功编译出来自动化学报的latex模板,反正开始头很大!!!最后终于没忍住打开了: 自动化学报官网下载模板链接,因为我就要用latex模板(不能服输!)找到的解决方案是:使用

QIANFANGshiwo的博客 7709

word2vector入门教程

摘要: 网上已经有许多对w2v的介绍了,这里只是做一个简单的概括。下面这篇文章我认为是关于W2V写的比较好的文章,读者有兴趣可以先参考一下: w2v参考文章1 另外一篇是关于Skip-Gram和CBow的介绍。 Skip-Gram&CBOW 逻辑比较清晰的综述文章: 综述文章 数学原理很清晰很短的一篇文章(也有关于负采样的简单说明) 参考文章 1.什么

SCUT_Sam 1万+

读书 | 设计模式之禅 - 责任链模式

使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。责任链模式的重点是在“链”上,由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回相应的结果:① Handler 抽象类//每个处理者都必须对请求做出处理 //被final修改的抽象方法不能被继承 public final Response handleMessage(Request request) {

你今天真好看呀 680

Tiktok/抖音旋转验证码

主要记录一下旋转验证码的逆向思路

记录一些web逆向的过程 5969

责任链模式

《android设计模式》读书笔记,如有侵权,请尽快与我联系删除,谢谢 一。定义   责任链模式,是行为型设计模式之一。对于链,就是由多个节点相连构成的模型,对于链式结构,每个节点都可以被拆开再连接,很灵活。应用到编程领域,将每个节点看成一个对象,每个对象拥有不同的处理逻辑,将一个请求从链式的首部发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止,我们将这样一种模式

Arlen6310的专栏 443

【异常】OpenClaw总Token超限400报错400 Total tokens of image and text exceed max message tokens. Request id:

摘要: 多模态大模型调用中,图文总Token超限导致的400报错是常见问题。本文分析了该报错的触发原因(文本+图片Token总和超出接口限额),并从技术层面解释了多模态Token的计数规则。解决方案分为三个层次:1)紧急修复(精简文本、压缩图片、拆分请求);2)标准化根治(预校验Token、图片预处理、限额适配);3)进阶兜底(分块处理、模型升级、容错机制)。通过前置管控与源头优化,可有效解决并预防此类问题,提升业务稳定性。

奶爸的编程之路,也就一周冷个三天 831

深度学习实战107-基于Qwen3+GraphRAG+Agent的智能文档管理系统:精准问答与决策支持

在当今信息爆炸的时代,企业面临海量文档的管理与利用挑战。传统文档管理系统虽然提供了存储和检索功能,但缺乏对文档内容的深度理解与分析能力,更难以实现基于知识的决策支持。基于多模态大模型Qwen3、GraphRAG技术与Agent框架构建的智能文档管理系统,能够突破传统限制,实现文档内容的精准解析、知识图谱的自动构建、复杂关系的推理分析以及决策建议的生成,为企业知识管理带来革命性变革。

微学AI的博客 865

《Android源码设计模式》读书笔记 (9) 第9章 责任链模式

前言 该模式是行为设计模式之一.如果说android中该模式应用最具代表性的例子的话就是android的触摸机制.大家此时可以想想android的点击事件传递和拦截机制那幅图,就能更好的理解这个模式啦.如果想不起来也没关系,这里贴出来这个图.(以前自己画的,有点丑,大家也可以自行百度哈,不影响理解(^__^) ). 定义 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系

qq_28690547的博客 452

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

python设计模式之责任链模式

责任链模式比如我们还在读书的时候,考试的分数都是几个档次,比如90-100分,80-90分,好吧我想做一个根据分数打印你的学习成绩的反馈, 比如90-100就是A+,80-90就是A,70-80就是B+… 当然你可以用很多种方法实现,我这里就来实现一个Chain模式:用一系列的类来响应, 但只有遇到适合处理它的类才会处理,类似与case和switch的作用python的例子class BaseHan

leongongye的专栏 1390

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python有那两种编程模式_Python的组合模式与责任链模式编程示例

组合模式我们把Composite模式看成一个复杂的属性结构,其实基本有三种角色:树干(定义一些操作树叶leaf的操作),树枝(树干上有很多树枝)和树叶(树干想要具体操作的对象) ,Composite模式帮我们实现:即它们在充当对象的时候,还是其他对象的容易,从而提供一致性python的例子class Trunk(object):'''树干'''def __str__(self):passdef s...

weixin_39960710的博客 78

《Android源码设计模式解析与实战》读书笔记(九)——责任链模式

之前忘记记录了,策略模式和状态模式是行为型模式。设计模式共23种,分三大类: 1).创建型模式5种:单例模式,建造者模式,原型模式,工厂方法模式,抽象工厂模式。 2).行为型模式11种:策略模式,状态模式,责任链模式,解释器模式,命令模式,观察者模式,备忘录模式,迭代器模式,模版方法模式,访问者模式,中介者模式。 3).结构型模式7种:代理模式,组合模式,适配器模式,装饰模式,享元模式,外观

禽兽先生不禽兽 478

《Android源码设计模式解析》读书笔记——Android中你应该知道的设计模式

断断续续的,《Android源码设计模式解析》也看了一遍,书中提到了很多的设计模式,但是有部分在开发中见到的几率很小,所以掌握不了也没有太大影响。 我觉得这本书的最大价值有两点,一个是从设计模式的角度去理解Android源码,结合着日常开发中的常用类,对设计模式的理解会更加的深刻;另外一个好处就是了解常用模式,再看其他人写的代码的时候,更容易理解代码思路。下面是我的读书笔记和一些思考,设计

赵凯强 1万+

大话设计模式读书笔记--19.责任链模式

定义 责任链模式定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 比如: 员工小张向组长申请加薪, 组长没这个权利并将请求告诉部长,部长同意了小张的加薪请求 模式结构 代码实现 场景: 经理可以批准请假, 经理的上级是总监, 总监可以批准加薪 代码实现:点击下载 优点 ...

weixin_30249203的博客 75

《设计模式之美》读书笔记2

2、分层与模块化:不同模块之间使用接口进行通信,模块之间的耦合很小,每个团队聚焦于一个独立的高内聚模块来开发,最终像搭积木一样将各个模块组装起来构成一个复杂的系统。统一的访问方式能够简化上层代码的编写,并且使代码更容易复用。除此之外,抽象和封装还能有效控制代码复杂性的蔓延,将复杂性封装在局部代码中,隔离实现的易变性,提供简单、统一的访问接口,其他模块使用会更简单。1、封装与抽象:封装了不同类型设备的访问细节,抽象为统一的文件访问方式,更高层的代码就能基于统一的访问方式,来访问底层不同类型的设备。

qq_15054345的博客 557

【读书笔记】设计模式第五章:行为型模式

本文主要分析了模板方法模式、命令模式、责任链模式、策略模式、迭代器模式,介绍它们的定义、优缺点、使用场景,以及实例代码。为了深刻地理解设计模式,最重要的还是动手编写代码。 我参照书中的例程重新构想了一些更加生动、易于理解的例子,希望大家喜欢。 代码可以通过以下链接进行浏览: http://git.oschina.net/caipeichao/java-design-pattern 这些代码都经过编译运行,保证没有错误。

白色咖啡 990

读书笔记之 - javascript 设计模式 - 责任链模式

http://www.9ask.cn/blog/group.asp?gid=691&pid=800320 http://www.9ask.cn/blog/group.asp?gid=691&pid=800318 http://www.9ask.cn/blog/group.asp?gid=691&pid=800317 http://www.9ask.cn/blog/group.asp?gid=

90

《设计模式与游戏完美开发》——第十三周读书笔记

这周来介绍责任链模式。 前言:你们肯定都有过这样的例子,比如我有一些问题需要咨询学校部门或者电信公司,但是学校那么多处理部门,你不知道该去打哪个电话,那么你就选择了一个通用的客服电话,打过去,发现这个部门解决不了你的问题,然后他也不知你这个问题是该如何解决,给你提供了下一个部门,你继续打过去,帕拉拉的说了一大堆,然后这个部门也不是负责这个, 你又去打他提供的“可能解决这个办法”的部门,因此你就花了...

qq_43546758的博客 237

Python的组合模式与责任链模式编程示例

Python的组合模式与责任链模式编程示例 这篇文章主要介绍了Python的组合模式与责任链模式编程示例,组合模式与责任链模式都属于Python的设计模式,需要的朋友可以参考下 组合模式 我们把Composite模式看成一个复杂的属性结构,其实基本有三种角色:树干(定义一些操作树叶leaf的操作),树枝(树干上有很多树枝)和树叶(树干想要具体操作的对象) ,Composite模...

weixin_30555125的博客 138

责任链模式——使编程更有灵活性

(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条线,并沿着这条链传递该请求,直到有对象处理它为止。 这类似于力的传递一样,一环套一环。 二、使用场景 (1)多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定; (2)在请求处理者不明确的情况下向多个对象中的一个提交一个请求

wangwei129549的博客 419

设计模式之禅读书笔记—行为类模式

设计模式之禅读书笔记—行为类模式 PDF下载地址 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 责任链模式 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者的耦合关系.将这些对象练成一条链...

Young方远的专栏 263

《设计模式之禅》读书笔记--(11)责任链模式

定义 责任链模式通过将多个对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止,这样可以避免请求的发送者与接受者之间的耦合关系。 类图 抽象处理者实现三个职责:一是定义一个请求的处理方法handleMessage,唯一对外开放;二是定义一个链的编排方法setNext,设置下一个处理者;三是定义具体请求者必须实现的两个方法:定义自己能够处理的级别getHandlerLevel和具...

SigalHu 291
上一篇: 第二十三章烤羊肉串引来的思考--命令模式(读书笔记)
下一篇: 第二十五章 世界需要和平--中介者模式(读书笔记)
进击的横打
博客等级 码龄19年 2万+粉丝 1296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值