学号:222018321062006 姓名:宋行健 班级:2018 级软件工程 1 班
2021 年 5 月 9 日 课堂作业
1. 思路
首 先 有 一 个 URIRequest 类 , 这 个 类 中 封 装 了 URI 的 三 部 分 ——命 名 机 制
(protocol)、资源主机名(hostname)、资源路径(path)。这个类就类似计算器例
子中 CalcRequest 类。我简单写了一下这个类的构造方法,截取字符串获得该类的命名
机制,作为之后的选择具体控制类的依据。
class URIRequest {
String protocol;
String hostname;
String path;
public URIRequest(String URI) {
this.protocol = URI.split("://")[0];
}
}
责任链模式设计 URI 的访问,包含一个抽象类 URIHandler,它作为抽象处理者,
定义请求处理方法,维护继任者引用。当所有的具体处理类都无法处理时,会抛出异
常。
abstract class URIHandler {
private URIHandler successor;
public URIHandler(URIHandler successor) {
this.successor = successor;
}
public void request(URIRequest request) {
if (getSuccessor() != null) {
getSuccessor().request(request);
} else {
throw new RuntimeException("Unspported Request!");
}
}
public URIHandler getSuccessor() {
return successor;
}
public void setSuccessor(URIHandler successor) {
this.successor = successor;
}
}
另 外 还 应 包 含 三 个 具 体 处 理 者 , httpUnit 、 FTPUnit 、 mailtoUnit , 分 别 根 据
URIRequest 中 的 protocol 字 段 , 分 别 通 过 链 式 结 构 处 理 “ http:// ” 、 “ ftp:// ” 、
“mailto://”这些不同类型的资源,如果均不符合则返回父类继续调用请求。
class httpUnit extends URIHandler {
public httpUnit(URIHandler successor) {
super(successor);
}
评论0