观察者模式

下面通过举个例子来了解下观察者模式的使用场景。

现在金融媒体每天都实时知道各家银行的利息利率,当然媒体小伙伴可以每天时不时的去询问,也就是轮询,这样干的话,银行朋友可不耐烦了,祢TMD别来烦我,我还有一大堆客户要处理呢。媒体朋友于是想了个办法,在银行找个兼职小伙伴,媒体朋友让他做的是,每当银行公布利率时,只需他打电话告知下我们媒体朋友,这样不就省事多了。

简单的说,观察者模式就是,观察者注册通知中心,通知中心接收到变化,会给相应的观察者发消息。 其中涉及到通知中心Subject、观察者Observer , 观察者必须注册到Subject


下面是具体实现代码

观察者接口

package cn.dev4mobile.android.observer.app;

/**
 * Created by dev4mobile on 14-5-18.
 */
public interface Observer {
  //Observer Operation
  public void update(float interest);
}


媒体作为观察者

package cn.dev4mobile.android.observer.app;

/**
 * Created by dev4mobile on 14-5-18.
 */
public class Internet implements Observer{
  @Override public void update(float interest) {
    System.out.println("Internet[" + interest + "]");
  }
}


Subject 接口

/**
 * Created by dev4mobile on 14-5-18.
 */
public interface Subject {

  public void registerObserver(Observer observer);
  public void unregisterObserver(Observer observer);
  public void notifyObservers();

}


通知中心 实现Subject

package cn.dev4mobile.android.observer.app;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by dev4mobile on 14-5-18.
 */
public class Loan implements Subject{

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

  public float getInterestRate() {
    return interestRate;
  }

  public void setInterestRate(float interestRate) {
    this.interestRate = interestRate;
    notifyObservers();
  }

  @Override public void registerObserver(Observer observer) {
    observers.add(observer);
  }

  @Override public void unregisterObserver(Observer observer) {
    observers.remove(observer);
  }

  @Override public void notifyObservers() {
    for (Observer observer : observers) {
      observer.update(interestRate);
    }
  }
}

业务逻辑处理

package cn.dev4mobile.android.observer.app;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Loan loan = new Loan();
    Internet internet = new Internet();
    Paper paper = new Paper();
    loan.registerObserver(internet);
    loan.registerObserver(paper);
    loan.setInterestRate(20.0f);
  }
}
 loan.setInterestRate() 这个方法实现里面必须有 notifyObservers(); 来通知观察者数据的变化


总之:通知中心含有观察者的引用,通知中心业务处理过程中,调用观察者来传递数据。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值