1. 程式人生 > >利用觀察者模式來獲取執行緒中的資料或者回調函式

利用觀察者模式來獲取執行緒中的資料或者回調函式

首先
//抽象主題角色,watched:被觀察
public interface Watched
{
    public void addWatcher(Watcher watcher);

    public void removeWatcher(Watcher watcher);

    public void notifyWatchers(Watcher watcher,String str);

}
//抽象觀察者角色
public interface Watcher
{
    public void update(String str);

}


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**觀察者管理
 * @author huangziwang
 *
 */
public class ConcreteWatched implements Watched
{
    // 存放觀察者
    private static List<Watcher> list = new ArrayList<Watcher>();

    public void addWatcher(Watcher watcher)
    {
        list.add(watcher);
    }

    public void removeWatcher(Watcher watcher)
    {
        list.remove(watcher);
    }

    public void notifyWatchers(Watcher watcher1,String str)
    {
        // 自動呼叫實際上是主題進行呼叫的
    	Iterator<Watcher> e = list.iterator();
    	while (e.hasNext()) {
    		Watcher watcher = e.next();
                //精確找出觀察者返回函式並從佇列中刪除
    		if (watcher.equals(watcher1)) {
        		watcher.update(str);
        		e.remove();
        		System.out.println(list.size());
    		}
		}
    }

}


public class ConcreteWatcher implements Watcher
{

    public void update(String str)
    {
        System.out.println(str);
    }

}
public class TestThread extends Thread {
	private Watcher watcher;
	// 將被觀察者物件傳入執行緒,這裡充分顯示了面向物件開發的好處
	public TestThread (Watcher watcher) {
		this.watcher = watcher;
	}
	public void run() {
		Watched concreteWatched = new ConcreteWatched();
		concreteWatched.notifyWatchers(watcher, "我是:" + hashCode());
	}

}


public class Test
{
    public static void main(String[] args)
    {
        Watched girl = new ConcreteWatched();
        // 將觀察者加入佇列中
        Watcher watcher1 = new ConcreteWatcher();
        girl.addWatcher(watcher1);
        TestThread t = new TestThread(watcher1);
        t.start();
    }
}

丟擲結果

我是:743319257
0


相關推薦

利用觀察模式獲取執行資料或者調函式

首先//抽象主題角色,watched:被觀察 public interface Watched { public void addWatcher(Watcher watcher); public void removeWatcher(Watcher wat

利用觀察模式實現Cocos2DX-lua遊戲的訊息管理系統

http://blog.csdn.net/operhero1990/article/details/48575487                遊戲中某些物件往往需要及時獲知其他特定物件狀體的改變。為降低類之間的耦合度,可以建立訊息管理系統,實現訊息的集中與分發。觀察者

java在子執行與主執行傳遞資料函式

預習知識點: 什麼是回撥函式? 下面是知乎大神的回答,簡直不能再精闢 程式碼: package kun.thread; public class THread { static C c=new C(); //flag用來標誌子執行緒執行結束 stati

自定義介面利用觀察模式在第二個頁面向第一個頁面傳送資料

這裡不用Intent傳值,主要簡單介紹下interface的使用 效果如下: 首先新建兩個頁面MainActivity和HomeActivity,佈局很簡單,TextView和Button,看也看

解析觀察模式在安卓程序的應用——如何實現跨界面Handler通訊

設計之下 管理 alt cto mov png opera 規範 bubuko 這裏特使用了github中的一個項目作為例子進行解析,地址為:https://github.com/LiqiNew/HandlerFrame/tree/master/handler

觀察模式在Foundation框架通知的應用

GitHub傳送門 1.何為觀察者模式? 觀察者設計模式定義了物件間的一種一對多的依賴關係,以便一個物件的狀態發生變化時,所有依賴於它的物件都得到通知並自動重新整理。 舉個簡單的例子:你和你的舍友都訂閱了同一個公眾號,你和舍友就是觀察者,而這個公眾號就是觀察物件。作為觀察者,你不需要每時每刻都盯著這個公

Java多執行-----單例模式在多執行的使用用問題

   1.餓漢模式(立即載入模式)與多執行緒 不管需不需要用到例項都要去建立例項,即在類產生的時候就建立好例項 package com.thread; /** * 餓漢模式 * * @author yyx 2018年12月28日 */ public cl

單例模式在多執行的安全性研究

概述 關於一般單例模式的建立和分析在我的另一篇部落格《Java設計模式——單件模式》中有詳細說明。只是在上篇部落格中的單例是針對於單執行緒的操作,而對於多執行緒卻並不適用,本文就從單例模式與多執行緒安全的角度出發,講解單例模式在多執行緒中應該如何被使用。

餓漢式單例模式在多執行併發訪問的解決方案

/**  * 懶漢式 如果在多執行緒重會出現執行緒安全問題   * */ class Sing {private static Sing sin = null;private Sing() {}// 通過同步鎖直接就可以解決執行緒安全問題 這裡屬於的是靜態的所以這裡的//

用Handler的post()方法傳遞執行的程式碼段到主執行執行

package com.kale.handler; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android

【JS 設計模式觀察模式之實時改變頁面的金額數

觀察者設計模式概念:有時被稱作釋出/訂閱模式,觀察者模式定義了一種一對多的依賴關係,讓多個觀察者(每個處的主賬號金額函式)物件同時監聽某一個主題物件(修改子賬號金額後呼叫的deliver的物件Publisher)。這個主題物件在狀態(呼叫deliver方法)發生變化時,會通知

【一起學設計模式觀察模式實戰:真實專案屢試不爽的瓜娃EventBus到底如何實現觀察模式的?

申明 本文章首發自本人公眾號:壹枝花算不算浪漫,如若轉載請標明來源! 感興趣的小夥伴可關注個人公眾號:壹枝花算不算浪漫 22.jpg 前言 之前出過一個設計模式的系列文章,這些文章和其他講設計模式的文章 有些不同 文章沒有拘泥於講解設計模式的原理,更多的是梳理工作中實際用到的一些設計模式,並提取出對應業務模

執行的訊號機制--sigwait 函式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

執行的訊號機制--sigwait()函式

這個例子演示了:通過在主執行緒中阻塞一些訊號,其它的執行緒會繼承訊號掩碼,然後專門用一個執行緒使用sigwait函式來同步的處理訊號,使其它的執行緒不受到訊號的影響。#include <pthread.h> #include <stdio.h> #include <sys/sig

QT通過執行資料傳遞給主函式進行顯示

根據別人的程式碼,自己重新寫一次加深印象。 標頭檔案mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QThread>

觀察模式執行執行訂閱事件並順序執行的問題

       對事件釋出訂閱模式中啟動執行緒執行操作,但又要保證執行緒順序執行的一些思考和實踐,在開發過程中,經常會遇到需要使用事件來觸發方法執行的情況,比如CS中按鈕的點選事件,滑鼠移動事件,鍵盤監聽事件等等,有時候需要執行比較耗時的任務,但並不希望阻塞主執

使用觀察模式實現執行將計算結果撥給多個物件

《Java網路程式設計》第三章執行緒講使用回撥的方法從執行緒中返回資訊給物件。例如,如果有多個物件對執行緒的計算結果感興趣,那麼執行緒可以儲存一個要回調的物件列表。特定的物件可以通過呼叫執行緒類的一個方法把自己新增到這個列表中來完成註冊,表示自己對計算結果很感興趣。如果有多

執行安全的觀察模式的設計

觀察者模式的應用,主要的行為就是註冊和移除觀察者(observer),以及通知所有已註冊的Observers。這裡介紹的是Chromium專案中實現的執行緒安全的觀察者管理及通知的基礎類ObserverListThreadSafe, 它的能力包括: 觀察者可

觀察模式,無需多執行完成資料監聽

大家好,我們今天來了解一個新的設計模式——觀察者模式。 觀察者模式的思路很簡單,它被廣泛地用在各種資料監控上。很多時候我們希望監聽某個資料的變化,希望一旦獲悉它的變化之後立即採取一些舉措。按照常規的操作,我們需要開啟額外的執行緒來進行監聽。但是開啟執行緒一則非常麻煩,二則需要帶來額外的開銷,我們今天介紹的觀察

觀察模式利用委托)

利用 lin 定義 cati eve 實例化 namespace esp spa 1.添加三個類文件,定義三個類(貓、狗、老鼠)   貓是主要事件 namespace MyDelegate { public class Cat { publ