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

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

一、实验目的

掌握软件责任链模式中的命令模式,能够用责任链模式编写程序,解决实际问题。

二、实验内容与要求

内容:某小学老师指定班里的三位学生收寒假作业,三位学生分别负责收语文、数学和英语作业。请用责任链模式对三位学生收作业的工作进行模拟,程序设计语言可自由选择。
要求:需要用“文字+代码+截图”的形式对实验的主要代码和运行结果进行展示和描述。

三、实验方法

责任链模式是在有多个对象情况下,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整,类图如下:
在这里插入图片描述

  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. 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

猜你喜欢

转载自blog.csdn.net/escFAJ/article/details/108026750