个人理解:在报社订阅杂志,你有订阅和取消订阅的权利,而报社只管在给已经订阅的人发放杂志。当我们取消订阅时,就收不到杂志。
定义:定义了对象之间的一对多的关系,这样一来,当一个对象改变时,它的所有依赖都会收到通知并自动更新。
代码:
推荐主题超类,能够注册,删除,数据变动时通知关注者
public abstract class Subject{
private List<Observer> list = new LinkList<>();// 观察者名单
public void addObserver(){
list.add(o);//注册观察者
}
public void delectObserver(Observer o){
int i = list.indexOf(o); //删除观察者
if(i>-1
){
list.remove(o);
}
}
public void notifyObservers(String state){
for( Observer o: list){
o.updata(state); // 通知观察者
}
}
}
Observer接口
public interface Observer{
public void updata(String state);
}
subject具体实现类
public class ConcreteSubject extends Subject{
public String state ;
public boolean isChange = false;
public void change(){
if(isChange){
this.notifyObservers(state);
}
}
public String getState(){
return state;
}
public void setState(String state){
this.state = state;
isChange = true;
}
public boolean isChange(){
return isChange;
}
}
observer具体类
public class CocreteObserver implements Observer{
public String name;
public ConcreteObserver(String n){
name = n;
}
public void updata(String state){
System.out.println(name+"updata new state"+state);
}
}
测试类
public class Test{
public static void main (String args[]){
ConcreteObserver subject = new ConcreteObserver();
Observer o1 = new ConcreteObserver("张三");
Observer o2 = nre ConcreteObserver("李四");
subject.addObserver(o1);
subject.addObserver(o2);
subject.setState("上班了");
subject.change();
subject.setState("下班了");
subject.change();
}
}