观察者模式理解

观察者模式理解

参考资料 Android使用的设计模式1——观察者模式)

今天主要对 观察者模式进行了理解,通过多个代码进行深入理解。

观察者自己的理解(可能不全)

观察者模式 主要使用在 数据的传递上面,

 /*注册观察者*/
/*View.OnClickListener() 为 观察者*/
      button.setOnClickListener(new View.OnClickListener() {
          /*观察者实现*/
           @Override
           public void onClick(View view) {
               Log.e(TAG, "onClick: " + "已经点击了");
           }
        });

在这里面发现:
button 被观察者
View.OnClickListener() 为观察者

setOnClickListener 将 观察者View.OnClickListener() 加入到 button 中

我们可以看到  被观察者 button 主要发送 消息 ,而 观察者
View.OnClickListener() 主要接受消息。

我们可以初步理解 在观察者模式里面 ,被观察者 发送消息,观察者 接受消息

那么观察者与被观察者怎么关联的呢?? 通过注册或者订阅来进行关联

如果用网络上文章的订阅来理解的话,或者 人民日报 订阅来看, 订阅者 为 接受消息的人 ,就是观察者;而 发送消息的 就是 被观察者,例如 人民日报 ;他们之间的关系是通过订阅来实现的,谁来订阅,观察者订阅,他会把对象传递给 被观察者 ,这就是 被观察者 知道把信息 发送给哪个 观察者。

比如 setOnClickListener  方法就是订阅的方法,正常应为 观察者处理该方法,但为了在代码中方便实现该逻辑  被观察者 调用该方法,接受观察者对象。

参考资料的理解

在 GPS 位置 获取的时候

locationManager 是被观察者
statusListener 是观察者

订阅方法 为 addGpsStatusListener
//监听器实现
private final GpsStatus.Listener statusListener = new GpsStatus.Listener() 
{
    public void onGpsStatusChanged(int event) 
  {
      // GPS状态变化时的回调,获取当前状态
      GpsStatus status = locationManager.getGpsStatus(null);
    //自己编写的方法,获取卫星状态相关数据
       GetGPSStatus(event, status);
    }
};

同样 广播也是采用 观察者模式

广播就是观察者
public class Receiver extends BroadcastReceiver{  
    public void onReceive(Context context, Intent intent) {  
        Bundle bundle = intent.getExtras();  
        ...  
    }  
}  
Context 是被观察者
Intent intent = new Intent();  
intent.setAction("...");  
Context.sendOrderedBroadcast(intent,null); 

订阅或注册方法 就是  sendOrderedBroadcast

猜你喜欢

转载自blog.csdn.net/hyl411136528/article/details/53932691