4种角色:
1、抽象观察者
2、抽象主题
3、具体观察者
4、具体主题
Java对观察者模式提供了支持 详情见: java.util.Observable
/**
* 抽象观察者
* */
public interface IObserver {
void notification(String str);//被通知方法 由被观察的对象调用
}
/**
* 抽象主题角色
* */
public interface ILooked {
void addLooked(IObserver obj);//注册观察者
void removeLooked(IObserver obj);//移除观察者
void submit(String str);//通知观察者
}
/**
* //具体观察者
* */
public class ConcretObserver implements IObserver {
// 该方法最终一定是由被观察对象执行的
@Override
public void notification(String str) {
System.out.println("我被点击"+str);
}
}
/**
* 具体主题角色
* */
public class MyButton implements ILooked {
//观察者集合
private List<IObserver> list=new ArrayList<IObserver>();//
@Override
public void addLooked(IObserver obj) {//注册观察者
list.add(obj);
}
@Override
public void removeLooked(IObserver obj) {//移除观察者
list.remove(obj);
}
@Override
public void submit(String str) {//通知观察者执行
for(IObserver ob : list){
ob.notification(str);
}
}
}
/**
* 测试
* */
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyButton button=new MyButton();
//创建观察者
IObserver b1=new ConcretObserver();
IObserver b2=new ConcretObserver();
IObserver b3=new ConcretObserver();
//往被观察对象里注册观察者
button.addLooked(b1);
button.addLooked(b2);
button.addLooked(b3);
button.submit("通知观察者");
//移除观察者
button.removeLooked(b1);
button.submit("通知观察者");
}
}