对于观察者模式,应该每个开发者都应该熟悉,其实对于接口回调的方法就是一个小型观察者模式,观察者对象随时监听被观察者的变化,一旦发生变化,就会回调给每个观察者的,下面我写一个简单的例子:
/**
* 被观察者抽象基类
* @author luweicheng
*
*/
public abstract class Subject {
/**
* 添加观察者
* @param observer
*/
public abstract void addObserver(Observer observer);
/**
* 移除观察者
* @param observer
*/
public abstract void delObserver(Observer observer);
/**
* 通知观察者
*/
public abstract void update();
}
/**
* 观察者的接口
* @author luweicheng
*
*/
public interface Observer {
/**
* 通知更新
*/
public void update();
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class MySubject extends Subject {
List<Observer> mList = new ArrayList();
@Override
public void addObserver(Observer observer) {
mList.add(observer);
}
@Override
public void delObserver(Observer observer) {
mList.remove(observer);
}
@Override
public void update() {
Iterator<Observer> iterator = mList.iterator();
while (iterator.hasNext()) {
iterator.next().update();
}
}
}
/**
* 观察者1
* @author luweicheng
*
*/
public class Observer1 implements Observer{
public void update() {
System.out.println("观察者1被通知了!!!");
}
}
/**
* 观察者2
* @author luweicheng
*
*/
public class Observer2 implements Observer{
public void update() {
System.out.println("观察者2被通知鸟!!!");
}
}
public class ModeText {
/**
* 设计模式测试类
* @author luweicheng
*/
public static void main(String[] args) {
Observer observer1 = new Observer1();
Observer observer2 = new Observer2();
Subject subject = new MySubject();
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.update();
}
}
测试结果: