软件设计模式之责任链模式实验

软件设计模式之责任链模式实验 一、实验目的
掌握软件责任链模式中的命令模式,能够用责任链模式编写程序,解决实际问题。
二、实验内容与要求
内容:某小学老师指定班里的三位学生收寒假作业,三位学生分别负责收语文、数学和英语作业。请用责任链模式对三位学生收作业的工作进行模拟,程序设计语言可自由选择。
要求:需要用“文字+代码+截图”的形式对实验的主要代码和运行结果进行展示和描述。
三、实验方法
责任链模式是在有多个对象情况下,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整,类图如下:
软件设计模式之责任链模式实验
文章图片

  1. 新建抽象类AbstractHandler及Hander接口
package com.chain.java; abstract class AbstractHandler { private Handler Handler = null; // 持有责任链中下一个责任处理者的引用 public void setHandler( Handler handler ) { this.Handler = handler; } public Handler getHandler() { return Handler; } } interface Handler { public void operator(); // 处理份内工作的方法 }

  1. 构建MyHandler核心类
package com.chain.java; class MyHandler extends AbstractHandler implements Handler { private String name; public MyHandler( String name ) { this.name = name; } @Override public void operator() { System.out.println(name + ": 现在开始收作业!"); if (getHandler() != null) { System.out.println(name + ": 作用已收齐,下一个收作业的是:" + getHandler()); getHandler().operator(); } else { System.out.println(name + ": 我已收齐语文,数学,英语的作业!"); } } @Override public String toString() { return name; } }

3.构建TestChainOfResponsibility责任链测试类
package com.chain.java; public class TestChainOfResponsibility { public static void main( String[] args ) { MyHandler h1 = new MyHandler("语文课代表"); // 新建一个名字为h1的事务处理者 MyHandler h2 = new MyHandler("数学课代表"); // 新建一个名字为h2的事务处理者 MyHandler h3 = new MyHandler("英语课代表"); // 新建一个名字为h3的事务处理者 MyHandler h4 = new MyHandler("老师"); // 新建一个名字为h4的事务处理者 h1.setHandler(h2); // h1的下级设为h2,那么h1可以把责任交给h2 h2.setHandler(h3); // h2的下级设为h3,那么h2可以把责任交给h3 h3.setHandler(h4); // h3的下级设为h4,那么h3可以把责任交给h4 h1.operator(); // 调用h1的事务处理函数 } }

四 、实验结果
  1. 软件设计模式之责任链模式实验
    文章图片

  2. Abstracthandler类提供了get和set方法,方便MyHandle类设置和修改引用对象,MyHandle类是核心,实例化后生成一系列相互持有的对象,构成一条链。
  3. 可考虑使用Chain of Responsibility的情况:有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。你想在不明确指定接受者的情况下,想过个对象中的一个提交一个请求。可处理一个请求的对象集合应该被动态指定。
  4. 【软件设计模式之责任链模式实验】在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

    推荐阅读