1 一对多关系。一个被观察者,n个观察者。
解耦,此时被观察者不需要知道都有哪些观察者,观察者也不需知道被观察者究竟是谁。
(能够解耦的原因:程序依赖于抽象,而不是相互依赖)
2 一般实现:
Observer接口、Subject接口,ObserverImpl实现(多个实例,甚至可以多个子类)、SubjectImpl实现(单个)
其中:
Subject接口:regist(),unRegist(),notifyAllRegistor()
Observe接口:doSomething()
在notifyAllRegistor()中调用所有注册了的observer的doSomething方法jike
3 java实现:
java.util.Observer接口 和 java.util.Observable接口
其中
java.util.Observable:addObserver(),deleteObserver(),notificateObservers()
java.util.Observer:update(Observable ob,Object arg)
4 spring实现:
<bean id="observer1" class="MyObserver"/> <bean id="observer2" class="MyObserver"/> <bean id="subject1" class="MySubject"/> <bean id="subject" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetObject"><ref local="subject1"/></property> <property name="targetMethod"><value>addObserver</value></property> <property name="arguments"> <list> <ref bean="observer1"/> <ref bean="observer2"/> </list> </property> </bean>