观察者模式的定义:
在awt或者swing等界面框架中的一个应用:事件监听
以下代码是模拟了awt或者swing等界面框架的实现,现实源码会有些不同.
/**
* Observer的接口定义
*/
public interface IOnClickListener {
/**
* 当有鼠标点击事件时,触发这个方法
*/
public void onClick();
}
/**
* Obersver的具体实现
*/
public class OnClickListener implements IOnClickListener {
public void onClick() {
System.out.println("This is observer pattern!");
}
}
/**
* Subject接口定义
*/
public interface Subject {
/**
* 增加一个listener
* @param listener
*/
public void addListner(OnClickListener listener);
/**
* 删除一个listener
* @param listener
*/
public void removeListner(OnClickListener listener);
/**
* 当事件发生的时候,通知感兴趣的listener
*/
public void notifyListner();
}
/**
* Subject的具体实现
*/
public class MyButton implements Subject {
//用来存放所有的listener
private List<IOnClickListener> listeners = new ArrayList<IOnClickListener>();
public void addListner(OnClickListener listener) {
listeners.add(listener);
}
public void removeListner(OnClickListener listener) {
listeners.remove(listener);
}
public void notifyListner() {
for (IOnClickListener listener : listeners) {
listener.onClick();
}
}
}
/**
* 代表一个窗口
*/
public class MyWindow {
// 在界面添加一个按钮
private MyButton button = new MyButton();
/**
* 完成初始化操作
*/
public void init() {
// 在这个按钮上添加一个监听,当有鼠标点击的时候打印一字符串
button.addListner(new OnClickListener());
}
}
类图: