定义
以上图片来自百度百科。
这个模式主要处理一对多的依赖关系。一个对象状态改变时,其他的依赖对象也做出相应的处理。
模式结构
Subject:目标
抽象的目标主要抽象的是观察这个的注册和注销,然后一个通知更新的方法
publicinterfaceSubject{
/**
* 注册观察者
* @param observer
*/
voidregisterObserver(Observer observer);
/**
* 取消观察者
* @param observer
*/
voidremoveObserver(Observer observer);
/**
* 通知更新
*/
voidnotifyObservers();
}
ConcreteSubject: 具体目标
publicclassNotifyObserverimplementsSubject{
privateListmObservers;
publicNotifyObserver(){
mObservers =newArrayList<>();
}
@Override
publicvoidregisterObserver(Observer observer){
mObservers.add(observer);
}
@Override
publicvoidremoveObserver(Observer observer){
inti = mObservers.indexOf(observer);
if(i >=0) {
mObservers.remove(observer);
}
}
@Override
publicvoidnotifyObservers(){
System.out.print(" >>>>>mObservers.size()>>>>>>>"+ mObservers.size());
System.out.println();
for(Observer o: mObservers) {
o.update("在吗????");
}
}
}
Observer: 观察者
抽象的观察者,所有观察者共同拥有的一个接口。
publicinterfaceObserver{
/**
* 处理逻辑
* @param s
*/
voidupdate(String s);
}
ConcreteObserver: 具体观察者
观察者A
publicclassObserverAimplementsObserver{
Subject mSubject;
publicObserverA(Subject subject){
mSubject = subject;
mSubject.registerObserver(this);
}
@Override
publicvoidupdate(String s){
System.out.println("ObserverA:"+ s);
}
}
观察者B
publicclassObserverBimplementsObserver{
Subject mSubject;
publicObserverB(Subject subject){
mSubject = subject;
mSubject.registerObserver(this);
}
@Override
publicvoidupdate(String s){
System.out.println("ObserverB : "+ s);
}
}
测试代码
publicclassTest{
publicstaticvoidmain(String[] args){
Subject subject =newNotifyObserver();
Observer observerA =newObserverA(subject);
Observer observerB =newObserverB(subject);
// 通知更新
subject.notifyObservers();
//移除监听
subject.removeObserver(observerA);
System.out.println(">>>>>>>>>>>>>>>>>");
subject.notifyObservers();
}
}
测试结果
>>>>>mObservers.size()>>>>>>>2
ObserverA:在吗????
ObserverB : 在吗????
>>>>>>>>>>>>>>>>>
>>>>>mObservers.size()>>>>>>>1
ObserverB : 在吗????
网友评论