观察者模式理解
今天主要对 观察者模式进行了理解,通过多个代码进行深入理解。
观察者自己的理解(可能不全)
观察者模式 主要使用在 数据的传递上面,
/*注册观察者*/
/*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