首页 > Design > 浅谈观察者模式和代理模式

浅谈观察者模式和代理模式

  今天聊天交流的时候,提及观察者模式和代理模式。一个同学是这么说的:观察者模式和代理模式实现出来的最终效果都一样,在代码层面上都是可以相互实现的。他可能是觉得不管用什么模式,最后业务层面实现的需求都是一样的。这就使我之后对这两种模式进行了深入的研究,细思他们的定义。

先聊我们为什么要用设计模式?

  定义:设计模式是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。
  恩,这个定义非常的准确。
  解决方案:设计模式是一些解决问题的办法,或者说是解决问题的方式或方法。
  特定问题:设计模式不是什么万能灵药,并不是什么问题都能解决,通常一个设计模式仅仅解决某个或某些特定的问题,并不能包治百病。
  重复出现:只有这些特定问题”重复出现”,那么为这些问题总结解决方案才是有意义的行为。因为只有总结了这些问题的解决方案,当这些问题再次出现的时候,就可以复用这些解决方案,而不用从头来寻求解决办法了。
  特定环境下:任何问题的出现都是有场景的,不能脱离环境去讨论对问题的解决办法。这个点理解不的,导致了很多模式被滥用,还招来了一群设计模式黑。
  经过验证的:每个人都可以总结一些用于解决在特定环境下、重复出现的、特定问题的解决方案,但并不是每个人总结的解决方案都算得上是设计模式,这些解决方案应该要有足够的应用来验证,并得到大家的认可和公认。
  在软件开发中:是在软件开发这个行业的,其他的行业不在这个讨论范围内。
  这是纯粹的理论,必须和实践相结合来提高自己。为此记下这些模式在每次的编码、项目重构、迭代中慢慢的领悟。

观察者模式和代理模式

  Observer(观察者模式)
  Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.(定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,
所有依赖于它的对象都得到通知并自动刷新。)
  比如说:在菜市场里面,一个菜摊A的菜涨价了,其他菜摊的才也跟着涨了起来。他们之间的关系是其他菜摊会随着菜摊A的状态变化而变化,而其他菜摊与菜摊A这两者之间很少有除了观察(触发机制)之外的行为。
  Proxy(代理模式)
  Provide a surrogate or placeholder for another object to control access
to it.(为其他对象提供一个代理以控制对这个对象的访问。)
  现实中将军士兵的例子,将军用命令控制着士兵的各种行为。这种模式重点在于控制。

参考资料

  《研磨设计模式
  《设计模式:可复用面向对象软件的基础
  《Design Patterns: Elements of Reusable Object-Oriented Software

  1. 还没有评论
评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks