观察者模式的角色有两个,一个是观察者,另一个是被观察者。
一般情况下当观察者发生一定状态,则由被观察者响应出来,被观察者从观察者得到数据,并做出对应动作。
其uml图如下所示:
其实我们平时多用的监听器,也是一种变种的观察者模式,其实在我看来,则是一种更加贴切,简单,易懂的观察者模式,只不过观察的只有一个,如果有多个被观察者,维护成队列,就更贴切了。
下面我用代码来解释一下。
package com.modedesign.observer;
/**
* @author ctt:
* @version 创建时间:2016年5月10日 下午8:10:45
* 类说明
*/
public class Test {
public static void main(String[] args) {
View v = new View();
v.setClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("click");
}
});
v.onTouch();
}
}
package com.modedesign.observer;
/**
* @author ctt:
* @version 创建时间:2016年5月10日 下午8:09:24
* 类说明
*/
public interface OnClickListener {
public void onClick(View v);
}
package com.modedesign.observer;
/**
* @author ctt:
* @version 创建时间:2016年5月10日 下午8:09:58
* 类说明
*/
public class View {
private OnClickListener clickListener;
private int id;
public OnClickListener getClickListener() {
return clickListener;
}
public void setClickListener(OnClickListener clickListener) {
this.clickListener = clickListener;
}
public void onTouch(){
//判断按下和抬起的位置
clickListener.onClick(this);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}