责任链模式-Chain of Responsibility(Java实现),…
2018-06-18 01:08:06来源:未知 阅读 ()
责任链模式-Chain of Responsibility, 例1
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
Trouble类
本类是:待责任链来处理的问题Trouble类.
本例子较简单, Trouble只有一个int型作为待处理的编号.
public class Trouble { private int number; public Trouble(int number) { this.number = number; } public int getNumber() { return number; } public String toString() { return "[Trouble " + number + "]"; } }
Support抽象类
Support类是责任链中的节点抽象出来的统一定义.
public abstract class Support { private String name; private Support next; public Support(String name) { this.name = name; } public Support setNext(Support next) { this.next = next; return next; } protected abstract boolean solve(Trouble trouble); protected void done(Trouble trouble) { // 解决 System.out.println(trouble + " is resolved by " + this + "."); } protected void fail(Trouble trouble) { // 未解决 System.out.println(trouble + " cannot be resolved."); } public void execute(Trouble trouble) { if (solve(trouble)) { done(trouble); } else if (next != null) { next.execute(trouble); } else { fail(trouble); } } public String toString() { return "[" + name + "]"; } }
ZeroSupport类
本类专门用于处理trouble编号为0的
/** * 本类专门用于处理trouble为0的情况 */ public class ZeroSupport extends Support { public ZeroSupport(String name) { super(name); } @Override protected boolean solve(Trouble trouble) { if (trouble.getNumber() == 0) { return true; } else { return false; } } }
LimitSupport类
只要Trouble的编号小于本类的成员变量limit的值, 那么LimitSupport类的实例就可以处理这个Trouble
/** * 本类专门用于处理trouble值小于limit的情况 */ public class LimitSupport extends Support { private int limit; public LimitSupport(String name, int limit) { super(name); this.limit = limit; } @Override protected boolean solve(Trouble trouble) { if (trouble.getNumber() < limit) { return true; } else { return false; } } }
OddSupport类
只要Trouble的编号是奇数, 那么OddSupport类的实例就可以处理这个Trouble.
/** * 本类专门用于处理trouble为奇数的情况 */ public class OddSupport extends Support { public OddSupport(String name) { super(name); } @Override protected boolean solve(Trouble trouble) { if (trouble.getNumber() % 2 == 1) { return true; } else { return false; } } }
Main
用于测试运行
public class Main { public static void main(String[] args) { Support charlie = new ZeroSupport("Charlie"); Support bob = new LimitSupport("Bob", 100); Support diana = new LimitSupport("Diana", 200); Support elmo = new OddSupport("Elmo"); Support fred = new LimitSupport("Fred", 300); // 形成职责链 charlie.setNext(bob).setNext(diana).setNext(elmo).setNext(fred); // 制造各种问题, 并让这个责任链来处理 for (int i = 0; i < 500; i += 33) { charlie.execute(new Trouble(i)); } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
- 高手眼中的观察者模式有什么不一样 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash