设计模式学习-责任链模式

概念

使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止.

代码编写
csharp 复制代码
using UnityEngine;
using System.Collections;
public class ChainOfResponsbilityStucture :MonoBehaviour{
	void Start{
		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 };
		 foreach (int request in requests)
		 {
		     h1.HandleRequest(request);
		 }
	}
	//声明一个抽象类规范子类的行为
	abstract class Handler{
		protected Handler successour;
		
		public void SetSuccessour(Handler successour){
			this.successour= successour;
		}
		public void abstract RequestHandler(int request);
	}
	
	public class ConcreteHandler1:Handler{
		public override void RequestHandler(int request){
			if(request>=0 &&request < 10){
				Debug.Log($"交给我处理{this.GetType().Name}handled request {request}");
			}else if(successour != null){
				successor.RequestHandler(request);
			}
		}
	}
	public class ConcreteHandler2:Handler{
		public override void RequestHandler(int request){
			if(request>=10 &&request < 20){
				Debug.Log($"交给我处理{this.GetType().Name}handled request {request}");
			}else if(successour != null){
				successor.RequestHandler(request);
			}
		}
	}
	public class ConcreteHandler3:Handler{
		public override void RequestHandler(int request){
		if(request>=20 &&request < 50){
				Debug.Log($"交给我处理{this.GetType().Name}handled request {request}");
			}else if(successour != null){
				successor.RequestHandler(request);
			}
		}
	}
}

主旨就是"你完不成就要找到你上司让他完成,你上次完不成就找上司的上司。。。"

相关推荐
小苏兮14 小时前
【C++】类与对象(下)
开发语言·c++·学习
易元14 小时前
模式组合应用-装饰器模式
后端·设计模式
一位搞嵌入式的 genius14 小时前
ES6 核心特性详解:从变量声明到函数参数优化
前端·笔记·学习
77qqqiqi15 小时前
学习结构体
c语言·学习
宁静致远202115 小时前
【C++设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
c++·设计模式·策略模式
肥肠可耐的西西公主15 小时前
后端(fastAPI)学习笔记(CLASS 1):扩展基础
笔记·学习·fastapi
CHANG_THE_WORLD15 小时前
C++ 并发编程指南 并发设计模式:Actor vs. CSP (生活场景版)
c++·设计模式·生活
對玛祷至昏16 小时前
算法学习路径
学习·算法·排序算法
零千叶17 小时前
【面试】AI大模型应用原理面试题
java·设计模式·面试
qq_3863226920 小时前
华为网路设备学习-32(BGP协议 七)路由反射器与联邦
网络·学习