观察者模式

个人理解:在报社订阅杂志,你有订阅和取消订阅的权利,而报社只管在给已经订阅的人发放杂志。当我们取消订阅时,就收不到杂志。
定义:定义了对象之间的一对多的关系,这样一来,当一个对象改变时,它的所有依赖都会收到通知并自动更新。
代码:
    推荐主题超类,能够注册,删除,数据变动时通知关注者
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();
    }
}

你可能感兴趣的:(设计模式)