全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android回调与观察者模式的实现原理

回调与观察者模式的实现原理:废话不多说,直接上Demo回调的原理:

观察者模式:

A类中定义一个被观察者画家

package com.example.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

import java.util.ArrayList;

/**
 * user: uidq0530 ,date: 2017-03-29.
 * description:
 *
 * @author xhunmon
 */
public class A extends View {

  private Paint mPaint;

  public A(Context context) {
    super(context);
    mPaint = new Paint();
  }

  //1.进来的人给了一张座子
  public interface OnAListener{
    //可以看画家绘制
    void look();
  }

  //2.一个房间
  private ArrayList<OnAListener> lists = new ArrayList<>();

  //3.进入房间的通道
  public void register(OnAListener listener){
    lists.add(listener);
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawText("画家画画", 50, 50, mPaint);

    //4.只有房间的人能看画家绘制
    for(int i=0 ;i<lists.size(); i++){
      lists.get(i).look();
    }
  }

  //5.出去房间的通道
  public void unregister(OnAListener listener){
    if(lists.contains(listener))
      lists.remove(listener);
  }
}

B类中是观察者人,人可以有很多个,但是画家只能有一个

package com.example.test3;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

import com.example.view.A;
/**
 * user: uidq0530 ,date: 2017-03-29.
 * description:
 *
 * @author xhunmon
 */
public class B extends Activity {

  private A.OnAListener mListener;
  private A mA;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mA = new A(this);
    //1.创建一个人
    mListener = new A.OnAListener() {

      //3.当进入房间之后,人才能看到画家绘制
      @Override
      public void look() {
        Toast.makeText(B.this, "我注册了,就可以监听A中画家是否在绘制了", Toast.LENGTH_SHORT).show();
      }
    };
    //2.进入房间
    mA.register(mListener);

    setContentView(mA);
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    //4.出去房间
    if(mListener != null)
      mA.unregister(mListener);
  }
}

总结:最常见的观察者是广播,而观察者的本质就是回调,所以实现观察者的其实就是一堆回调。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # 回调  # 观察者模式  # Android使用观察者模式Observer实现网络状态监听  # 浅谈Android设计模式学习之观察者模式  # Android编程设计模式之观察者模式实例详解  # Android观察者模式实例分析  # android开发中使用java观察者模式  # Android源码学习之观察者模式应用及优点介绍  # 详解Android观察者模式的使用与优劣  # 的人  # 类中  # 有很多  # 给了  # 能看  # 多说  # 最常见  # 大家多多  # 就可以  # 有一个  # 能看到  # user  # ArrayList  # View  # Paint  # Canvas  # util  # graphics  # date 


相关文章: 建站之星展会模板:智能建站与自助搭建高效解决方案  网站插件制作软件免费下载,网页视频怎么下到本地插件?  建站之星导航如何优化提升用户体验?  简单实现Android文件上传  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  XML的“混合内容”是什么 怎么用DTD或XSD定义  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何配置支付宝与微信支付功能?  微课制作网站有哪些,微课网怎么进?  Bpmn 2.0的XML文件怎么画流程图  香港服务器如何优化才能显著提升网站加载速度?  网站制作新手教程,新手建设一个网站需要注意些什么?  专业网站建设制作报价,网页设计制作要考什么证?  Swift开发中switch语句值绑定模式  如何使用Golang安装API文档生成工具_快速生成接口文档  北京制作网站的公司,北京铁路集团官方网站?  如何在建站宝盒中设置产品搜索功能?  网站制作价目表怎么做,珍爱网婚介费用多少?  存储型VPS适合搭建中小型网站吗?  行程制作网站有哪些,第三方机票电子行程单怎么开?  制作网页的网站有哪些,电脑上怎么做网页?  广州建站公司哪家好?十大优质服务商推荐  如何用腾讯建站主机快速创建免费网站?  简单实现Android验证码  建站VPS推荐:2025年高性能服务器配置指南  微信小程序制作网站有哪些,微信小程序需要做网站吗?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  如何在IIS管理器中快速创建并配置网站?  建站之星如何保障用户数据免受黑客入侵?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  如何续费美橙建站之星域名及服务?  已有域名如何免费搭建网站?  C#如何使用XPathNavigator高效查询XML  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  济南网站制作的价格,历城一职专官方网站?  建站主机如何安装配置?新手必看操作指南  宝塔建站教程:一键部署配置流程与SEO优化实战指南  c++怎么用jemalloc c++替换默认内存分配器【性能】  临沂网站制作公司有哪些,临沂第四中学官网?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  php json中文编码为null的解决办法  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  建站之星各版本价格是多少?  建站之星代理费用多少?最新价格详情介绍  如何确保西部建站助手FTP传输的安全性?  定制建站哪家更专业可靠?推荐榜单揭晓  用v-html解决Vue.js渲染中html标签不被解析的问题 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。