android 广播观察者,Android回调与观察者模式的实现原理

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

ac5a7f34a4425ef709be1b27b05b9aa4.png

f8a67225f74680d34504855a8ca6f041.png

cd584d9678a8743073c87246a8c1b1dd.png

a5c97def5675e55371a72edd52ff0970.png

9d2e7d1f50cbcb34d165c26a26303a63.png

观察者模式:

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

}

}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值