博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小菜学设计模式——职责链模式
阅读量:6881 次
发布时间:2019-06-27

本文共 981 字,大约阅读时间需要 3 分钟。

hot3.png

背景

    时间过得真快,转眼又是半年,可是作为一名将要资深的码农,是不是应该加薪了呢?可是说到加薪,经理又要推诿,这个不是我能决定的,你去找总监吧,总监又会说,在等等吧,等这个项目上线不会亏待你的。我的个神呀,这个产品上线估计要到明年春天吧!好吧,关于职责问题,这里就是一个著名的设计模式,职责链模式。

1、使用意图

    把用户的请求,层层传递处理,直到这个请求被处理为止。

2、生活实例

    工作加薪、请假。    

3、Java 例子(框架、JDK 、JEE)

    暂时没有发现,如果有发现的同学可以提出修改。

4、模式类图

095942_2wKm_1989321.png

抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法以设定和返回对下家的引用。这个角色通常是一个Java抽象类。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。

具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。

5、模式优点

    职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。

    当客户提交一个请求时,请求是沿链接传递直到有一个ConcreteHandler对象负责处理它。

    接收者和发送者都没有对方明确信息,且链中的对象自己也并不知道链的结构。结果只是职责链可简化对象的相互连接,他们仅需要保持一个指向其后继者的引用,而不需要保持它所有的候选接受者的引用。

    随时的增加或修改处理一个请求的结构。增强了给对象指派职责的灵活性。

6、与类似模式比较

    一个请求极有可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理,所以对于使用这个设计模式一定要对逻辑清晰。

    这个设计模式感觉和状态模式有点相似,状态模式则是定义了不同状态的接口,然而,职责链模式则不会把内部处理的逻辑暴露给客户端,而是对客户端透明处理,我想这应该也就是二者的一个重大区别吧。二者共同点就是对象处理的传递,层层传递,直到处理为止。

转载于:https://my.oschina.net/heweipo/blog/470019

你可能感兴趣的文章
你绝对想不到,居然可以用Word给长短不一的文本数字组合补0
查看>>
MySQL主从复制与读写分离
查看>>
从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造
查看>>
android R文件丢失(R.java was modified manually! Reverting to generated version!)
查看>>
The Definitive Guide to Drupal 7
查看>>
部署ffmpeg及amr转mp3方法
查看>>
如何获取重载函数的地址 - 回复 "flq_00000" 的问题
查看>>
SPL笔记之双向链表
查看>>
论迭代式开发模式吸纳用户建议的困难度
查看>>
Delphi 2010 新增功能之: Rtti 单元(5): 获取方法的更多信息
查看>>
day2-Samba
查看>>
JavaScript 实现全角转半角 中文标点替换成英文标点
查看>>
Objective-c学习笔记(三)oc 多输入参数的方法及协议的使用及变量
查看>>
Linux学习笔记——文件操作
查看>>
shell实例-磁盘容量监控
查看>>
IntelliJ IDEA使用笔记
查看>>
Memcache集群的安装和配置
查看>>
Oracle的使用笔记
查看>>
Hadoop URL中读取数据出错:unknown protocol: hdfs
查看>>
Docker: Mac OS X 挂载非 /Users 下的目录
查看>>