被观察者类
package com.wei.observe;
import java.util.ArrayList;
import java.util.List;
/**
* @author: wangluming
* @date: On 2020/10/19
*/
public class MyObserverable {
private List<MyObserver> list = new ArrayList<>();
public boolean addObserver(MyObserver observer){
if (list.contains(observer)){
return false;
}
list.add(observer);
return true;
}
public boolean removeObserver(MyObserver observer){
if (list.contains(observer)){
list.remove(observer);
return true;
}
return false;
}
public void clearObserver(){
list.clear();
}
public void notifyupData(Object data){
for (MyObserver myObserver : list) {
myObserver.upData(data);
}
}
}
在观察者模式中被观察者只有一个,他可以被多个观察者观察,观察者的数据随着他的变化而变化,他可以添加以及移除观察者,也可以更新数据发送通知他的观察者更新数据.
被观察者接口
package com.wei.observe;
/**
* @author: wangluming
* @date: On 2020/10/19
*/
public interface MyObserver {
void upData(Object object);
}
被观察者接口只提供一个更新数据的接口
实现两个观察者类
package com.wei.observe;
import android.util.Log;
/**
* @author: wangluming
* @date: On 2020/10/19
*/
public class OneObserve implements MyObserver {
@Override
public void upData(Object object) {
Log.d("OneObserve", "object:" + object);
}
}
package com.wei.observe;
import android.util.Log;
/**
* @author: wangluming
* @date: On 2020/10/19
*/
public class TwoObserver implements MyObserver {
@Override
public void upData(Object object) {
Log.d("TwoObserver", "object:" + object);
}
}
测试观察者模式
package com.wei.observe;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import com.wei.jetpackdemo.R;
public class Main5Activity extends AppCompatActivity {
private Button btObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main5);
btObserver = (Button) findViewById(R.id.bt_observer);
final OneObserve oneObserve = new OneObserve();
final TwoObserver twoObserver = new TwoObserver();
btObserver.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MyObserverable myObserverable = new MyObserverable();
myObserverable.addObserver(oneObserve);
myObserverable.addObserver(twoObserver);
myObserverable.notifyupData("1111");
}
});
}
}
可以看到被观察者注册了两个观察者对象,点击按钮是被观察者更新数据而他的两个观察者也打印出了更新的数据,这样就实现了最简单的观察者模式