软件设计模式之责任链模式实验
软件设计模式之责任链模式实验 一、实验目的
掌握软件责任链模式中的命令模式,能够用责任链模式编写程序,解决实际问题。
二、实验内容与要求
内容:某小学老师指定班里的三位学生收寒假作业,三位学生分别负责收语文、数学和英语作业。请用责任链模式对三位学生收作业的工作进行模拟,程序设计语言可自由选择。
要求:需要用“文字+代码+截图”的形式对实验的主要代码和运行结果进行展示和描述。
三、实验方法
责任链模式是在有多个对象情况下,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整,类图如下:
文章图片
- 新建抽象类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();
// 处理份内工作的方法
}
- 构建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的事务处理函数
}
}
四 、实验结果
-
文章图片
- Abstracthandler类提供了get和set方法,方便MyHandle类设置和修改引用对象,MyHandle类是核心,实例化后生成一系列相互持有的对象,构成一条链。
- 可考虑使用Chain of Responsibility的情况:有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。你想在不明确指定接受者的情况下,想过个对象中的一个提交一个请求。可处理一个请求的对象集合应该被动态指定。
- 【软件设计模式之责任链模式实验】在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天
- python学习之|python学习之 实现QQ自动发送消息