设计模式-行为设计模式:责任链模式 ResponsibilityChain
来源:互联网 发布:网络思想政治教育总结 编辑:程序博客网 时间:2024/05/24 01:37
责任链模式
对一个任务处理的过程中,可能有多个环节,申请的发起者只能找到一个入口,它不知道环节里面的东西,只需要一个结果,保证里面的处理类是按照顺序对它进行处理
责任链模式就是让节点之间自己把任务进行传递处理,并返回一个结果
责任链父类
public abstract class BaseLian { public BaseLian _baselian; public abstract void Do(Animal house); }
下面3个子类 分别继承上面的父类,并且重写了Do方法,当发现自己解决不了之后,如果有下一级操作,会自动转送给下一级进行处理
/// <summary> /// 只能居住体积小于等于10的动物 /// </summary> public class SmallHouse:BaseLian { public SmallHouse() { Console.WriteLine("{0}开始测量......",this.GetType().ToString()); } public override void Do(Animal animal) { if (animal.Size <= 10) { animal.Node = "1"; animal.house = this.GetType().ToString(); } else { if (this._baselian != null) { //没权限,需要向上级提交 看上级是否可以居住 Console.WriteLine("{0}住不下,去别的地方看看吧", this.GetType().ToString()); base._baselian.Do(animal); } else { //没有更大的了 Console.WriteLine("没有更大的了"); } } } }
/// <summary> /// 只能居住体积小于等于20的动物 /// </summary> public class MediumHouse:BaseLian { public MediumHouse() { Console.WriteLine("{0}开始测量......",this.GetType().ToString()); } public override void Do(Animal animal) { if (animal.Size <= 20) { animal.Node = "1"; animal.house = this.GetType().ToString(); } else { if (this._baselian != null) { //没权限,需要向上级提交 看上级是否可以居住 Console.WriteLine("{0}住不下,去别的地方看看吧", this.GetType().ToString()); base._baselian.Do(animal); } else { //没有更大的了 Console.WriteLine("没有更大的了"); } } } }
/// <summary> /// 只能居住体积小于等于30的动物 /// </summary> public class BigHouse:BaseLian { public BigHouse() { Console.WriteLine("{0}开始测量......",this.GetType().ToString()); } public override void Do(Animal animal) { if (animal.Size <= 30) { animal.Node = "1"; animal.house = this.GetType().ToString(); } else { if (this._baselian != null) { //没权限,需要向上级提交 看上级是否可以居住 Console.WriteLine("{0}住不下,去别的地方看看吧", this.GetType().ToString()); base._baselian.Do(animal); } else { //没有更大的了 Console.WriteLine("没有更大的了"); } } } }
设置一个动物类
public class Animal { public int ID { get; set; } public string Name { get; set; } public int Size { get; set; } /// <summary> /// 是否找到居住点 0正在寻找 1找到了 2未找到 /// </summary> public string Node { get;set; } public string house { get; set; } }
调用
//创建一个动物 Animal animal = new Animal() { ID=1, Name="咩咩", Node="0", Size=12 }; BaseLian xiao = new SmallHouse(); BaseLian zhong = new MediumHouse(); BaseLian da = new BigHouse(); //为小房子添加中房子为下一级 xiao._baselian = zhong; //为中房子添加下一级为大 zhong._baselian = da; //把动物放进去 xiao.Do(animal); //检查动物状态 if (animal.Node == "2") { Console.WriteLine("太大了,没地方住"); } else { Console.WriteLine("{0}住在了{1}里面",animal.Name,animal.house); }
结果:
0 0
- 设计模式-行为设计模式:责任链模式 ResponsibilityChain
- 设计模式--行为型--责任链模式
- 行为型设计模式-责任链模式
- 行为型设计模式-责任链模式
- java 设计模式-行为模式之责任链模式
- 设计模式->行为型模式->责任链模式
- 【23种设计模式】行为型模式 > 责任链模式
- 设计模式--责任链模式ChainOfResponsibility(行为型)
- [设计模式-行为型]责任链模式(Chain of Responsibility)
- 行为设计模式---责任链模式(Chain of Responsibility)
- 【小话设计模式】行为型之责任链模式
- 设计模式-行为型之责任链模式
- 行为型:设计模式之责任链模式(十三)
- Java设计模式(行为型)之-责任链模式
- Java设计模式(17)行为型:责任链模式
- Python的行为设计模式之责任链模式
- 行为型设计模式之责任链模式
- Java设计模式_(行为型)_责任链模式
- 37 leetcode - Count and Say
- Android 中 Webview基本应用详解
- 高速公路ETC卡签之我见1-概述
- 逻辑数据库读取bseg
- 有关MySql编写可重复执行的sql(主要用于部署升级等)
- 设计模式-行为设计模式:责任链模式 ResponsibilityChain
- SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue
- Andorid SDK Manager详解
- 关于DBCP及使用。纯JDBC架构。
- 链表面试题总结(二)
- SQLite3 C语言API入门
- 串口设置
- 浅谈新能源与计算机
- 软件英文术语缩写大全