• 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); 

    希望大家可以使用

  • 相关阅读:
    密码盐 -- 为什么要在密码里加点“盐”
    Linux远程连接ssh工具(FinalShell)xshell替代神器
    模板文件不存在,无法解析文档”的几种解决办法
    9个PNG透明图片免费下载网站推荐
    我最近买的书里面带的CD盘,放电脑里后,说是0字节,但是可以播放,不能把里面的东西复制出来
    ASP程序加密/解密方法大揭密
    最稳定万能vip视频解析接口 支持HTTPS
    pycharm安装pyinstaller将pygame打包成exe
    Arduino101学习笔记(六)—— 高级IO
    Arduino101学习笔记(五)—— 模拟IO
  • 原文地址:https://www.cnblogs.com/wangying222/p/7485093.html
Copyright © 2020-2023  润新知