如何看待编程模式 + 观察者模式含义解释

本来是回帖,但还是发出来吧。这篇帖子是在 CSDN 的 Java 区发出的,地址是: http://topic.csdn.net/u/20120626/11/14c6301b-7493-437e-ac0e-0eca5f1400e3.html
原帖作者对编程模式中的观察者模式无法理解,以下是我回复的内容。

关于编程模式,我有一点告诫。编程原则(Principle)是真正应该去理解其发生来源与实际意义的东西。编程模式本身是别的程序员在编程过程中,总结出的一些定式,就像物理公式一样。物理和数学不一样,光应用公式是学不好的,主要还是理解机理,从而可以自己临时开发出各种公式。

  对于一个好的程序员来说,平时编程应该多多思考自己程序和编程原则的契合。至于模式,主要应该是顺便总结出来的,就算不总结也不是太严重的事情。只有偶尔遇到了障碍想不出好的解决方法,或者有时间学习别人的编程经验之时,才接触别人的编程模式,从而产生一些启发或者感想什么的。
  我们不应该把编程模式作为学习编程的基准。要有自己随便一想,就能找到经典编程模式在某种条件下不合用之处的自信。

接下来,来解释一下 观察者模式。程序过程都是由某些开端开始的。这种开端可以是用户操作,可以是某一个时间到了于是开始定时任务,可以是一个不断循环的过程终于满足了什么条件,或者一些传感器来了信号,等等。由这些开端开始,程序一步一步往下执行。在 Java 中就是开端方法中调用了某个别的对象的方法,在调用的方法中又继续调用了方法,以此逐步进行。
  观察者模式,是一种调用组织方式的编程模式。其意味着由事件开端,主动去调用下一步该执行的方法。比如你说新产生了一条新闻。那么软件系统咋知道新产生了一条新闻?很可能是新闻提供商调用了系统的 WebService 接口,传入了一条新的新闻内容对吧?以此为例。那么观察者模式,就是在这个新闻内容传入之后,立刻开始检索数据库,看都有谁订了新闻,然后逐一发送邮件或者某种形式的通知。
  并不是非得这样设计呀。可以将新闻记入数据库。以后订阅者谁执行了“读取新闻”操作,再临时搜索一遍数据库看有没有新闻。你看,这至少就是二种程序执行过程的组织方法。第一种的思路,就和观察者模式的思路是一样的。

可以说,如果一个程序过程,里边要并列地调用好几个对象的方法,而且这些调用是平级不分先后的,那么这种设计其实就已经可以叫做“观察者模式”了。需要在什么时候使用什么组织方式,应该建立在思考程序效率的基础上。如果硬件条件足够好,那么就变成了“能实现就行”。当然了,作为程序员,我们可能需要自己要求自己;以后这种要求,会给你的职业生涯带来很多益处。

你可能感兴趣的:(如何看待编程模式 + 观察者模式含义解释)