设计模式之 明确责任 观察者模式 状态模式 责任链模式

观察者模式是任务分发的一种模式。

如果认为我们设计的系统的各个模块(或子系统)的最终目的是完成共同任务,那么这个任务如何分配到多个模块的就是我们遇到的第一个问题。简单设计场合我们不会遇到这个问题,因为我们可以很清晰的划分责任,安排好逻辑,这是一种中心管控的办法,而且是隐式的,因为程序员自己承当了分配职责的单元。

当情况变得复杂的时候,我们首先想到的也是中心管控,不过这时候我们采取的是显式的构造一个管理者,它具有管控执行、分配职责的能力。第一个模式叫做状态模式(State),如果系统的状态可以很好的定义,那么可以根据当前状态指定执行模块;这是很容易想到的任务分发机制。但是有时候状态并非那么容易定义或者管理者并不清楚任务该交给谁,但是我们希望它能起到调度的作用,不如发出暂停的指令,维持一个任务栈等待,这就需要观察者模式,因为它不再直接分配职责,所以我们叫它观察者。

换一个更容易理解的名字,它叫做 发布/订阅 模式。观察者维持一个任务栈,而子模块通过订阅操作连接到这个任务栈,从订阅栈中取任务、完成、再取任务。

很显然,观察者模式的实质是状态同步,或者称为同步或者通信。它使得任务从分发变成了领取,观察者甚至不需要知道自己需要监督执行者,它只做全局管控;这是很好的解耦。但是同步或通信带来新的开销和复杂度。

责任链模式 是去中心的责任分发模式。和观察者模式很象,但是它不再需要那个所谓发布者,责任是在一个链条上传递,也就免去了通信的复杂度。打个比方,一个武林高手想去挑战少林寺方丈,首先要过看门人那一关,然后是一群小徒弟,然后是教拳师傅,然后是各个高僧,最后才轮到方丈,这就是一个责任链,职责自然而然的在上面传递。

好处很多,去中心化,设计简单,容易扩展和兼容。但是限制也很现实,首先链条如果太长会损失性能,如果不能明确职责,那么输出的有效性不能保证,比如上面武林高手那个例子,看门人不知天高地厚直接应战然后战死,导致消息不能传到院内,那么他就白死了。我们的系统遇到责任链一个有效输出的时候就会认为这个任务已经结束,所以如果链条上的每个环节不能确定是否是自己能处理的职责,就会出错。

转载于:https://my.oschina.net/backbye/blog/2209114

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值