Observable观察者模式的使用

今天我们公司封装的类中没有加上Observable观察者模式,但是很多地方需要用到Observable观察者模式

接下来就向大家介绍一下我的使用吧!

在介绍之前我们写了一个方法

 1 public class RefreshSender extends Observable {
 2 
 3     private static RefreshSender instances;
 4 
 5 
 6     public static RefreshSender getInstances(){
 7         if(instances==null)
 8             instances=new RefreshSender();
 9 
10         return  instances;
11     }
12 
13 
14     /**
15      * 发送消息
16      * @param type
17      */
18     public void sendMessage(String type){
19         setChanged();
20         this.notifyObservers(type);
21     }
22 
23 
24 }

这个方法可以注册也可以取消注册,还有一个发消息的方法

首先我使用最基本的直接使用Observable

1.发消息

在发消息的界面调Observable接口

 1  @Override
 2     protected void onCreate(Bundle savedInstanceState) {
 3         super.onCreate(savedInstanceState);
 4         RefreshSender.getInstances().addObserver(this);
 5     }
 6 
 7     @Override
 8     protected void onDestroy() {
 9         super.onDestroy();
10         RefreshSender.getInstances().deleteObserver(this);
11     }

在对应的进程中注册和取消注册

然后发消息

JSONObject object1 =new JSONObject();
                    object1.put("type","childrenaction");
                    object1.put("school",strValue);
                    RefreshSender.getInstances().sendMessage(object1.toJSONString());

好消息发好了,接下来接收消息了

2接收消息

同样用到Observeable就要注册和取消注册然后调Observeable这个接口

调接口大家就会发现有update这个方法,在这个方法里就可以获取到你传递的数据了

 @Override
    public void update(Observable observable, Object data) {
        try {
            JSONObject object = JSON.parseObject(data.toString());
            String type = object.getString("type");
            if ("childrenmess".equals(type)) {
                key = object.getString("school");
                list.clear();
                pageIndex = 1;
                getData(false);
            }
        } catch (Exception e) {

        }
    }

 

个人觉得这样写比较烦,个人觉得这个Observeable应该封装在BaseActivity或者BaseFragment中

比如

 1 public abstract class AsukaActivity extends AppCompatActivity implements Observer {
 2 @Override
 3     protected void onCreate(Bundle savedInstanceState) {
 4         super.onCreate(savedInstanceState);
 5   RefreshSender.getInstances().addObserver(this);
 6 initView();
 7 initEvent();
 8 }
 9  /**
10      * 发消息
11      * @param type
12      * @param object
13      */
14     public void sendObseverMsg(String type,JSONObject object){
15         object.put("type",type);
16         RefreshSender.getInstances().sendMessage(object.toJSONString());
17     }
18 
19     protected  abstract void initView();
20     protected  abstract void initEvent();
21     protected  abstract void oberserMsg(String type, JSONObject object);
22 
23  @Override
24     public void update(Observable observable, Object data) {
25         try {
26             JSONObject object= JSON.parseObject(data.toString());
27             String type=object.getString("type");
28             oberserMsg(type,object);
29         }catch (Exception e){
30 
31         }
32     }
33 
34  @Override
35     protected void onDestroy() {
36         super.onDestroy();
37         RefreshSender.getInstances().deleteObserver(this);
38         AsukaAndroid.app().getAppManager().finishActivity(this);
39     }
40   protected  abstract void initView();
    protected  abstract void initEvent();
    protected  abstract void oberserMsg(String type, JSONObject object);
41 }

那么怎么使用呢

使用就很简单了,只要继承AsukaActivity ,发送接收就可以了

继承会有oberserMsg这个方法进行接收

1 @Override
2     protected void oberserMsg(String type, JSONObject object) {
3         if ("workFlow".equals(type)) {
4             wfid = object.getString("wfid");
5             arr.clear();
6             pageIndex = 1;
7             isUpdate = false;
8             getData();
9         }

发送

 1 sendObseverMsg("workFlow", object); 

 

希望大家可以使用

posted on 2017-09-06 15:38  oooo呼呼  阅读(393)  评论(0编辑  收藏  举报