设计模式之观察者模式

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

//通知者接口

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也是等等,所以啊,有事没事就多多用用观察者模式啊。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值