222018321062006-宋行健-课堂作业1
在本作业中,宋行健同学探讨了如何利用责任链模式(Chain of Responsibility Pattern)来设计一个URI(统一资源标识符)的访问系统。责任链模式是一种行为设计模式,允许将请求沿着处理者对象的链进行传递,直到有一个对象能够处理这个请求。这种模式可以避免请求发送者与接收者之间的耦合,使得多个对象有机会处理同一个请求。 有一个名为`URIRequest`的类,它封装了URI的三个主要部分:命名机制(protocol)、资源主机名(hostname)和资源路径(path)。类的构造函数通过split方法解析字符串,获取协议部分。例如,对于"HTTP://example.com/path",`protocol`将被设置为"HTTP"。 接下来,定义了一个抽象类`URIHandler`,作为处理请求的抽象处理者。这个类有一个`successor`引用,用于链接下一个处理者。`request`方法负责传递请求给下一个处理者,如果链的末端没有处理者,则抛出异常。这允许请求在处理者之间传递,直到找到能够处理它的处理者。 然后,有三个具体处理者类:`httpUnit`、`FTPUnit`和`mailtoUnit`,它们分别处理以"http://"、"ftp://"和"mailto://"开头的URI。这些类继承自`URIHandler`,并覆盖`request`方法来检查传入的`URIRequest`的`protocol`字段。如果协议匹配,相应的处理程序将执行相应操作,如打印出"Http"或"FTP"。如果不匹配,请求将通过`super.request(request)`转发到链中的下一个处理者。 在这个设计中,`httpUnit`、`FTPUnit`和`mailtoUnit`的实例可以按照特定顺序连接成一个链。例如,如果创建一个`httpUnit`实例作为链的开始,然后是`FTPUnit`,最后是`mailtoUnit`,那么任何以"http://"开头的URI将由`httpUnit`处理,以"ftp://"开头的URI将由`FTPUnit`处理,而以"mailto://"开头的URI将由`mailtoUnit`处理。如果URI的协议都不符合这些类型,程序将抛出一个异常,表示不支持的请求。 这种设计体现了责任链模式的核心思想,即请求在处理者对象间流动,每个处理者都有可能处理请求,或者将请求传递给链上的下一个处理者。这种模式在处理多种可能性且不希望硬编码每个可能的分支逻辑时非常有用,提供了灵活性和可扩展性。通过添加新的处理者类,可以轻松地扩展URI处理的范围,而无需更改现有代码。
- 粉丝: 24
- 资源: 292
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0