观察者概念
观察者使用:
- 抽象被观察者
- 抽象观察者
- 具体被观察者
- 具体观察者
- 具体被观察者:状态, n个观察者列表,订阅发布,通知流程();
- 具体观察者:状态,1个被观察者,被通知方法
行为: 1个被观察者状态改变=>1个通知方法=>n个被通知方法=>n个观察者状态改变 类行为:
1. new 1个watched 2. new n个watcher,加两者关系 3. 改变状态 4. 调用notifyserver 5. 实现update
注:
超时时间就是为了持续循环着维护被观察者状态 不改变。 当触发setchange时候,循环打破,那些原本观察者定义的想观察的信息(这些信息是谁的都无所谓,大多数主题的,换句话说是watcher特别想关注的)就会被通知给所有的这些观察者让其采取行为。 这就是ZOOKEEPER原理。
- 被观察.setchange();
- 被观察.getVecor();//得到状态不允许。
备忘录
1.备忘录模式的优点和缺点 一、备忘录模式的优点 1、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时, 使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。 2、本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需 要的这些状态的版本。 3、当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。 二、备忘录模式的缺点: 1、如果发起人角色的状态需要完整地存储到备忘录对象中,那么在资源消耗上面备忘录对象会很昂贵。 2、当负责人角色将一个备忘录 存储起来的时候,负责人可能并不知道这个状态会占用多大的存储空间,从而无法提醒用户一个操作是否很昂贵。 3、当发起人角色的状态改变的时候,有可能这个协议无效。如果状态改变的成功率不高的话,不如采取“假如”协议模式。
spring 应用观察
1. <bean id="mailObserver" class="MailObserver"/>
2.
3. <bean id="jmsObserver" class="JMSObserver"/>
4.
5. <bean id="subjectTarget" class="Subject"/>
6.
7. <bean id="subject"
8. class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
9. <property name="targetObject"><ref local="subjectTarget"/></property>
10. <property name="targetMethod"><value>addObserver</value></property>
11. <property name="arguments">
12. <list>
13. <ref bean="mailObserver"/>
14. <ref bean="jmsObserver"/>
15. </list>
16. </property>
17. </bean>
Observer模式的最知名的应用是在MVC结构
观察者到处都是:
比如事件机制,js和flex的监听者模式,服务器模式应用,冒泡,服务发现,触发等等。
原创track --by oceanfloyd