设计模式-观察者模式

2018-05-07  本文已影响0人  ZjyMac

一,观察者模式详解

image.png
public interface Oberver {
    void update(String newState);
}
public abstract class Subject {
    //保存观察者对象
    private List<Oberver> obervers = new ArrayList<>();

    public void attach(Oberver oberver) {
        obervers.add(oberver);

    }

    public void detach(Oberver oberver) {
        obervers.remove(oberver);
    }
    //通知所有注册观察者对象
    public void notifyObservers(String newState){
        for (Oberver observer:obervers){
            observer.update(newState);
        }

    }
}
public class ConcreteObserver implements Oberver {
    private String observerState;
    @Override
    public void update(String newState) {
        observerState=newState;
    }
}
public class ConcreteSubject extends Subject{
    private String state;
    public String getState(){
        return state;
    }
    public void change(String newState){
        state=newState;
        notifyObservers(state);
    }

}

  ConcreteSubject concreteSubject = new ConcreteSubject();
        Oberver oberver = new ConcreteObserver();
        concreteSubject.attach(oberver);
        concreteSubject.change("I change");
public class TargetObserver implements Observer {
    private String name;//观察者名称

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
        ((TargetObservable) o).getNewState();
    }
}
public class TargetObservable extends Observable {
    private String newState;

    public String getNewState() {
        return newState;
    }

    public void setNewState(String newState) {
        this.newState = newState;
        this.setChanged();
        this.notifyObservers(newState);
    }
}
  TargetObservable targetObservable=new TargetObservable();
        TargetObserver targetObserver=new TargetObserver();
        targetObservable.addObserver(targetObserver);
        targetObservable.setNewState("hello");

···
TargetObservable targetObservable = new TargetObservable();
TargetObserver targetObserver = new TargetObserver();
targetObservable.addObserver(targetObserver);
targetObservable.setNewState("hello");
···

二,android中的实际应用

Button为被观察者,onClickListener为观察者

上一篇 下一篇

猜你喜欢

热点阅读