1:什么是观察者模式
对象之间存在一对多的依赖关系,一个对象发生改变的的时候,通知到其他的对象
2:怎么使用观察者模式
1:首先是目标对象,要有添加监听者方法和通知监听者方法
//目标类
public class Target {
private int id;
//包含所有的监听者
List<Observer> list=new ArrayList<Observer>();
public int getId() {
return id;
}
//设置id的时候 通知所有的观察者
public void setId(int id) {
this.id = id;
tongzhi();
}
//添加观察者
public void add(Observer observer){
list.add(observer);
}
//通知 两个观察者的行为
public void tongzhi(){
for (Observer observer : list) {
observer.update();
}
}
}
2:监听者对象构造函数的时候 把监听者添加到目标对象中
public interface Observer {
void update();
}
//监听器1
public class MyObserver1 implements Observer {
//引入目标
Target target;
//构造观察者的时候把 插入目标对象
public MyObserver1(Target target) {
this.target = target;
this.target.add(this);
}
public void update() {
System.out.println("观察者1转换程二进制: "+Integer.toBinaryString(target.getId()));
}
}
//监听器2
public class MyObserver2 implements Observer {
Target target;
//构造观察者的时候把 插入目标对象
public MyObserver2(Target target) {
this.target = target;
target.add(this);
}
//不同的监听器 做不通的事情
public void update() {
System.out.println("观察者2转换程八进制: "+Integer.toOctalString(target.getId()));
}
}
3:测试方法
@org.junit.Test
public void t1() {
//一个目标类
Target target = new Target();
//两个监听器 把目标添加到就监听器的list
new MyObserver1(target);
new MyObserver2(target);
//目标设置值得时候 通知监听器
target.setId(10);
System.out.println("==========");
target.setId(15);
}
4:测试结果