欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

觀察者的使用

觀察者模式

東光網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站開(kāi)發(fā)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

二話不說(shuō),上來(lái)就是定義

定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)送改變時(shí),所有依賴于它的對(duì)象都能得到通知并被自動(dòng)更新

這個(gè)好像還好理解那么一點(diǎn)點(diǎn),不過(guò)還是先來(lái)講個(gè)情景,

天氣預(yù)報(bào)的短信服務(wù),一旦付費(fèi)訂閱,每次天氣更新都會(huì)向你及時(shí)發(fā)送

其實(shí)就是我們無(wú)需每時(shí)每刻關(guān)注我們感興趣的東西,我們只需要訂閱它即可,一旦我們訂閱的事務(wù)有變化了,被訂閱的事務(wù)就會(huì)即時(shí)的通知我們

我們來(lái)看一下觀察者模式的組成:

  • 觀察者,我們稱它為Observer,有時(shí)候我們也稱它為訂閱者,即Subscriber

  • 被觀察者,我們稱它為Observable,即可以被觀察的東西,有時(shí)候還會(huì)稱之為主題,即Subject

至于觀察者模式的具體實(shí)現(xiàn),java里為我們提供了Observable類和Observer接口供我們快速實(shí)現(xiàn)該模式,但是這里為了加深印象,不用這個(gè)兩個(gè)類,以下是觀察者模式的代碼實(shí)現(xiàn):

1、首先我們定義一個(gè)的接口,里面是觀察者需要做的三件事:

public interface ObjectAble {

public void add(ObjectSerType type, ObjectServer obj);//添加訂閱

public void remove(ObjectSerType type, ObjectServer obj);//取消訂閱

void notifyDataChange(ObjectSerType type, Object... objs);//發(fā)送訂閱內(nèi)容

}

2、當(dāng)主題發(fā)生變化的時(shí)候,需要通知觀察者來(lái)做出響應(yīng),還需要一個(gè)onRecever方法,具體實(shí)現(xiàn)如下

public interface ObjectServer {

void onRecever(Object...obj);

}

3、定義觀察者類型的枚舉類,這是表示觀察者的類型,當(dāng)觸發(fā)ObjectAble 接口中的notifyDataChangee(ObjectSerType type, Object... objs)方法時(shí),即主題發(fā)生變化,所有類型為type的已訂閱的觀察者會(huì)被觸發(fā)。

package com.example.testobjectserver;

public enum ObjectSerType{

a,b,c,d

}

4、實(shí)現(xiàn)ObjectAble接口,為每個(gè)方法添加邏輯

package com.example.testobjectserver;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import android.util.Log;

public class ObjectAbleImpelet implements ObjectAble {

public static ArrayList<HashMap<ObjectSerType, ObjectServer>> ObjectServerList = new ArrayList<HashMap<ObjectSerType, ObjectServer>>();

static ObjectAbleImpelet instance = null;

public static ObjectAbleImpelet getInstance() {

synchronized (ObjectAbleImpelet.class) {

if (instance == null)

instance = new ObjectAbleImpelet();

}

return instance;

};

@Override

public void add(ObjectSerType type, ObjectServer obj) {

if (type == null && obj == null)

throw new NullPointerException("ObjectSerType or ObjectServer can not null");

synchronized (ObjectServerList) {

HashMap<ObjectSerType, ObjectServer> map = new HashMap<ObjectSerType, ObjectServer>();

map.put(type, obj);

ObjectServerList.add(map);

Log.e("", "ObjectServerList>>>" + ObjectServerList);

}

}

@Override

public void remove(ObjectSerType type, ObjectServer obj) {

for (HashMap<ObjectSerType, ObjectServer> map : ObjectServerList) {

Log.e("", "type>>>" + type);

if(map.get(type).equals(obj)){

ObjectServerList.remove(map);

Log.e("", "obj>>>" + obj);

break;

}

}

}

@Override

public void notifyDataChange(ObjectSerType type, Object... objs) {

for (int i = 0; i < ObjectServerList.size(); i++) {

HashMap<ObjectSerType, ObjectServer> map = ObjectServerList.get(i);

if (map.containsKey(type)) {

map.get(type).onRecever(objs);

}

}

}

}

5、測(cè)試:

package com.example.testobjectserver;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.TextView;

public class MainActivity extends Activity implements ObjectServer {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ObjectAbleImpelet.getInstance().add(ObjectSerType.a, this);//添加訂閱,類型為ObjectSerType.a, 類型由開(kāi)發(fā)者定義

findViewById(R.id.button1).setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

ObjectAbleImpelet.getInstance().notifyDataChange(

ObjectSerType.a, "你好");//主題發(fā)生變化,觸            //發(fā)所有類型為ObjectSerType.a的觀察者調(diào)用onRecever方法

}

});

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

        //主題變化后,觀察者的回調(diào)

@Override

public void onRecever(Object... obj) {

Log.e("", "我是觀察者?。?!" + (String) obj[0]);

((TextView) findViewById(R.id.textView1)).setText("" + (String) obj[0]);

}

@Override

protected void onDestroy() {

//無(wú)論如何,當(dāng)退出activity,該activity中的觀察者需要被回收,不然會(huì)導(dǎo)致觀察者容器中的觀察者

    //對(duì)象越來(lái)越多

ObjectAbleImpelet.getInstance().remove(ObjectSerType.a, this);

super.onDestroy();

}

}

6、如下圖所示:進(jìn)入activity注冊(cè)類型為a的觀察者,當(dāng)點(diǎn)擊按鈕,觸發(fā)onRecive回調(diào),更新ui;退出activity時(shí)注銷觀察者。該觀察者完成使命
觀察者的使用

當(dāng)前題目:觀察者的使用
文章來(lái)源:http://www.aaarwkj.com/article22/gihjcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄、網(wǎng)站排名、軟件開(kāi)發(fā)、商城網(wǎng)站全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
激情综合婷婷中文字幕| 少妇午夜福利一区二区| 国产一区二区三区精品久| 一区二区尤物区亚洲国产精品区| 永久免费成人在线视频| 久久久久久精品妇女| 成人免费视频国产免费| 久草福利资源在线观看视频| 国产黄色大片一级久久 | 人妻日韩精品综合一二三四| 激情亚洲不卡一区二区| 四虎在线观看免费资源| 夫妻爱爱视频在线观看| 欧美亚洲综合另类色妞| 亚洲av不卡一区二区在线观看 | 亚洲国产韩国精品在线| 亚洲欧美另类熟女丝袜| 久久男女激情免费视频| 丝袜美腿诱惑国产在线| 欧美一级午夜欧美午夜视频| 久久中文字幕日韩精品| 国产乱码精品一区二区三区爽爽爽| 老牛av一区二区三区| 中文字幕成人乱码亚洲| 久久精品国产亚洲av热老太| 欧美精品一区二区久久| av在线中文字幕乱码| 欧美性色黄大片人与善| 91成人国产综合久久精品| 国产精品亚洲av在线| 精品日韩av高清一区二区三区| 中文字幕一区精品日韩| 亚洲人色中文字幕天堂| 日韩精品中文字幕欧美乱| 日韩少妇黄色在线观看| 久久综合伊人欧美精品| 日本韩国黄色三级三级| 日本亚洲欧洲一区二区| 亚洲国产一区二区高清| 中文字幕久精品视频免费| 国产久精品热看久品热久热 |