Android回調(diào)與觀察者模式的實(shí)現(xiàn)原理
回調(diào)與觀察者模式的實(shí)現(xiàn)原理:廢話不多說,直接上Demo回調(diào)的原理:





觀察者模式:
A類中定義一個(gè)被觀察者畫家
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.進(jìn)來的人給了一張座子
public interface OnAListener{
//可以看畫家繪制
void look();
}
//2.一個(gè)房間
private ArrayList<OnAListener> lists = new ArrayList<>();
//3.進(jìn)入房間的通道
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類中是觀察者人,人可以有很多個(gè),但是畫家只能有一個(gè)
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.創(chuàng)建一個(gè)人
mListener = new A.OnAListener() {
//3.當(dāng)進(jìn)入房間之后,人才能看到畫家繪制
@Override
public void look() {
Toast.makeText(B.this, "我注冊(cè)了,就可以監(jiān)聽A中畫家是否在繪制了", Toast.LENGTH_SHORT).show();
}
};
//2.進(jìn)入房間
mA.register(mListener);
setContentView(mA);
}
@Override
protected void onDestroy() {
super.onDestroy();
//4.出去房間
if(mListener != null)
mA.unregister(mListener);
}
}
總結(jié):最常見的觀察者是廣播,而觀察者的本質(zhì)就是回調(diào),所以實(shí)現(xiàn)觀察者的其實(shí)就是一堆回調(diào)。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android使用viewpager計(jì)算偏移量實(shí)現(xiàn)選項(xiàng)卡功能
這篇文章主要為大家詳細(xì)介紹了android使用viewpager計(jì)算偏移量實(shí)現(xiàn)選項(xiàng)卡功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Android實(shí)現(xiàn)長按back鍵退出應(yīng)用程序的方法
這篇文章主要介紹了Android實(shí)現(xiàn)長按back鍵退出應(yīng)用程序的方法,實(shí)例分析了Android按鈕事件的操作技巧,需要的朋友可以參考下2015-05-05
Android解決viewpager嵌套滑動(dòng)沖突并保留側(cè)滑菜單功能
這篇文章主要介紹了 解決viewpager嵌套滑動(dòng)沖突,并保留側(cè)滑菜單功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06
Android TextSwitcher實(shí)現(xiàn)文字上下翻牌效果(銅板街)
這篇文章主要介紹了Android TextSwitcher實(shí)現(xiàn)文字上下翻牌效果(銅板街),需要的朋友可以參考下2017-05-05
Android中ProgressBar用法簡單實(shí)例
這篇文章主要介紹了Android中ProgressBar用法,以簡單實(shí)例形式分析了Android中ProgressBar進(jìn)度條控件的功能與布局相關(guān)技巧,需要的朋友可以參考下2016-01-01
Android中EditText setText方法的踩坑實(shí)戰(zhàn)
這篇文章主要給大家分享了一些關(guān)于Android中EditText setText方法的踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07

