观察者设计模式简介
现实生活中,每个人都是一个观察者,同时也是一个被观察者,"你站在桥上看风景,看风景的人在楼上看你"形容的就是这样的一个场景。观察者设计模式,定义了一种一对多的关联关系。一个对象 A 与多个对象 B、C、D 之间建立“被观察与观察关系”。当对象 A 的状态发生改变时,会通知所有观察者对象 B、 C、 D。当B、C、D 在接收到 A 的状态改变通知后,根据自身实际情况,做出相应改变。通常观察者和被观察者都是接口,上面所提到的对象是指实现了这些接口的对象。
定义一个观察者接口Observer:
package com.monkey1024.observer;
/**
* 观察者接口
*
*/
public interface Observer {
/**
* 在接收到通知之后做出的相应处理
* @param message
*/
public void handleNotify(String message);
}
定义被观察者接口ToBeObserver,添加三个方法分别是添加观察者、删除观察者、通知观察者:
package com.monkey1024.observer;
/**
* 被观察者接口
*
*/
public interface ToBeObserver {
/**
* 添加观察者
* @param observer
*/
public void addObserver(Observer observer);
/**
* 删除观察者
* @param observer
*/
public void removeObserver(Observer observer);
/**
* 通知观察者
* @param message
*/
public void notifyObserver(String message);
}
创建观察者A:
package com.monkey1024.observer.impl;
import com.monkey1024.observer.Observer;
public class ObserverA implements Observer {
@Override
public void handleNotify(String message) {
System.out.println("观察者A正在处理通知..");
}
}
创建观察者B:
package com.monkey1024.observer.impl;
import com.monkey1024.observer.Observer;
public class ObserverB implements Observer {
@Override
public void handleNotify(String message) {
System.out.println("观察者B正在处理通知..");
}
}
创建被观察者:
package com.monkey1024.observer.impl;
import java.util.ArrayList;
import java.util.List;
import com.monkey1024.observer.Observer;
import com.monkey1024.observer.ToBeObserver;
/**
* 定义被观察者的实现类
*
*/
public class Beauty implements ToBeObserver {
//声明观察者集合
List<Observer> observers;
public Beauty(){
observers = new ArrayList<>();
}
@Override
public void addObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObserver(String message) {
for(Observer o : observers){
o.handleNotify(message);
}
}
}
创建测试类:
package com.monkey1024.test;
import com.monkey1024.observer.Observer;
import com.monkey1024.observer.ToBeObserver;
import com.monkey1024.observer.impl.Beauty;
import com.monkey1024.observer.impl.ObserverA;
import com.monkey1024.observer.impl.ObserverB;
public class ObserverTest {
public static void main(String[] args) {
//创建被观察者
ToBeObserver beauty = new Beauty();
//创建观察者
Observer observerA = new ObserverA();
Observer observerB = new ObserverB();
//向被观察者中加入观察者
beauty.addObserver(observerA);
beauty.addObserver(observerB);
//向观察者发出通知
beauty.notifyObserver("快来啊");
System.out.println("---------------");
//删除观察者A
beauty.removeObserver(observerA);
//再次向观察者发出通知
beauty.notifyObserver("快来啊");
}
}
海报
0 条评论
176
本站已关闭游客评论,请登录或者注册后再评论吧~