首页 > 代码库 > 设计模式之观察者模式

设计模式之观察者模式

杨哥说观察者设计模式,通俗易懂,只要看图和例子即可。

技术分享

//通知者接口

package guanchazhe_designmode;

//抽象观察者

public abstract  class Observer {

protected String name;

    protected Subject sub;

 

    public Observer(String name, Subject sub)

    {

        this.name = name;

        this.sub = sub;

    }

 

    public abstract void Update();

 

}

//抽象观察者

package guanchazhe_designmode;

//抽象观察者

public abstract  class Observer {

protected String name;

    protected Subject sub;

 

    public Observer(String name, Subject sub)

    {

        this.name = name;

        this.sub = sub;

    }

 

    public abstract void Update();

 

}

 

两个被观察者对象

class Secretary implements Subject

{

    //同事列表

    private List<Observer> observers = new ArrayList<Observer>();

    private String action;//前台状态

 

    public List<Observer> getObservers() {

return observers;

}

 

public void setObservers(List<Observer> observers) {

this.observers = observers;

}

 

public String getAction() {

return action;

}

 

public void setAction(String action) {

this.action = action;

}

 

//增加

    public void Attach(Observer observer)

    {

        observers.add(observer);

    }

 

    //减少

    public void Detach(Observer observer)

    {

        observers.remove(observer);

    }

 

    //通知

    public void Notify()

    {

        for(Observer o : observers){

         o.Update();

        }

            

    }

 

    @Override

public String getSubjectState() {

// TODO 自动生成的方法存根

 

return getAction();

}

 

    

   

}

 

class Boss implements Subject

{

    //同事列表

private List<Observer> observers = new ArrayList<Observer>();

    public List<Observer> getObservers() {

return observers;

}

 

public void setObservers(List<Observer> observers) {

this.observers = observers;

}

 

public String getAction() {

return action;

}

 

public void setAction(String action) {

this.action = action;

}

 

private String action;//老板状态

 

    //增加

    public void Attach(Observer observer)

    {

        observers.add(observer);

    }

 

    //减少

    public void Detach(Observer observer)

    {

        observers.remove(observer);

    }

 

    //通知

    public void Notify()

    {

      for(Observer o : observers){

          o.Update();

         }

             

    }

 

@Override

public String getSubjectState() {

// TODO 自动生成的方法存根

 

return getAction();

}

 

    

}

 

观察者对象(也可以理解为订阅用户)

 

//看股票的同事

class StockObserver extends Observer

{

    public StockObserver(String name, Subject sub)

       {

     super(name, sub);

    }

 

    public void Update()

    {

     System.out.println("关闭股票行情,继续工作!"+sub.getSubjectState()+""+name);

       

    }

}

 

//看NBA的同事

class NBAObserver extends Observer

{

    public NBAObserver(String name, Subject sub)

       

    {

     super(name, sub);

    }

 

    public  void Update()

    {

     System.out.println("关闭NBA直播,继续工作!!"+sub.getSubjectState()+""+name);

       

    }

}

 

//程序入口

public static void main(String[] args) {

// TODO 自动生成的方法存根

 

Operation oper;

oper=(new FactoryMian()).new OperationFactory().createOperate("+");

oper.set_numberA(1);

oper.set_numberB(2);

double result=oper.getResult();

System.out.print(result);

 

}

 

执行效果:

技术分享

 

观察者原理:

      关键对象是主题Subject和观察者Oberver,一个Subject可以有任意数目的依赖它的Observer,一旦Subject的状态发生了改变,所有的Observer都可以得到通知。Subject发出通知时并不需要知道是它的观察者,也就是说,具体的观察者是谁,它根本不需要知道。而任何一个具体的观察者不知道耶不需要知道其他观察者的存在。就这么简单,不用多说

       在Android开发中其实有好多的场景设计都使用了观察者模式,比如按钮事件事件的触发其实也用了这个设计模式,rxjava也是等等,所以啊,有事没事就多多用用观察者模式啊。

 

设计模式之观察者模式