1.定义与作用
实际上就是实现回调的方法,在java中实现回调用的就是观察者模式。也就是说,事件一旦发生,就会调用相应的方法
2.涉及角色
(1)抽象主题(Subject):提供一个接口,用来供具体主题实现,提供抽象方法可以增加和删除观察者对象。
(2)具体主题(ConcreteSubject):存储具体的观察者对象;在主题内部状态改变时, 给所有登记过的观察者发出通知。(3)抽象观察者(Observer):为所有的具体观察者提供一个接口。
(4)具体观察者(ConcreteObserver):实现抽象观察者要求的接口。
3.实例
模拟java中Listener的实现
(1)定义抽象观察者
这里针对Session的创建监听
public interface MySessionListener
{
public void createSession();
}
(2)具体观察者1
模拟java监听Session的创建
public class JavaSessionListenerImpl implements MySessionListener {
@Override
public void createSession()
{
System.out.println("java session create");
}
}
(3)具体观察者2
定义自己的Session监听
public class MyOwnSessionListenerImpl implements MySessionListener
{
public void createSession()
{
System.out.println("my own session create");
}
}
(4)定义主题类(此处省略了接口)
用来增删观察者,并且发生时间的时候调用所有的观察者方法
public class Subject
{
private List<MySessionListener> observers = new ArrayList<MySessionListener>();
public void attach(MySessionListener s)
{
observers.add(s);
}
public void detach(MySessionListener s)
{
observers.remove(s);
}
public void notifyObservers()
{
for(MySessionListener s:observers)
{
s.createSession();
}
}
}
(5)客户端
public class Client
{
public static void main(String[] args)
{
Subject subject = new Subject();
MyOwnSessionListenerImpl ownSessionListenerImpl = new MyOwnSessionListenerImpl();
JavaSessionListenerImpl javaSessionListenerImpl = new JavaSessionListenerImpl();
subject.attach(ownSessionListenerImpl);
subject.attach(javaSessionListenerImpl);
//创建了Session
subject.notifyObservers();
}
}
结果为:
my own session create
java session create