设计模式--职责链模式

职责链模式,参考http://blog.csdn.net/zhang_xinxiu/article/details/9963305,这篇文章写的很好。

外观模式,参考http://blog.csdn.net/hguisu/article/details/7533759,这篇文章写的也很好。

职责链,chain of responsibility。

1.意图

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

3.适用性

在以下条件下使用Responsibisibility链:

有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。

你想在不明确指定接受者的情况下,向多个对象中的一个提交一个请求。

可处理一个请求的对象集合应被动态指定。

以上摘录自《设计模式》,奇怪的是《PHP设计模式介绍》这本书没有讲职责链,这个是不是和PHP本身面向对象的能力不足有关呢?这个问题留待以后去验证。

我的理解:

1.这个请求要可以被传递,那么这些对象最好是有相同的可以接收这样规格请求的接口,例如安卓的事件传递(安卓的事件传递就是一个职责链,那一层的view消耗了该事件,就返回true,然后这个返回值就向回传递。在职责链前面往往会使用外观模式,对于外部用户,他并不知道后面的职责链,这个是有外观实现者来处理的。)。如果接口不一致的话,恐怕就会有些问题,应该每个对象都可以单独接收这个请求,只是要处于某种特定的情况下。

2.消耗了请求,请求就不再继续向下传递,而是往回返回了;但其实,个人感觉,没有消耗请求的对象也可以针对请求有所响应。

3.每个对象都可以响应请求,也就是请求需要满足一定的条件,所以,对象的顺序是要合理安排的。




posted on 2015-05-14 17:20  chaiyu2002  阅读(70)  评论(0编辑  收藏  举报

导航