1. 程式人生 > >設計模式初探 行為模式 觀察者模式 c語言 版本實現

設計模式初探 行為模式 觀察者模式 c語言 版本實現

上午簡單的學習了觀察者模式,首先想到的是群郵件和微博加粉絲。於是寫了個鳳姐與粉絲的小程式。

我對設計模式是初次學習,理解可能並不準確,只能按照自己的理解去用程式模擬設計模式,希望理解的與其真正含義不要相差太遠為好。


/**設計模式 行為模式 觀察者模式 鳳姐與粉絲
  *2013年7月28
  *
 */
#include <stdio.h>
#include <stdlib.h>
struct Fans {
    struct Fengjie* fengjie;
    void ( *update) ();                             //粉絲獲得鳳姐的新狀態,被動獲得
    void ( *joinfans)(struct Fans fans);            //粉絲有權選擇成為鳳姐粉絲
    void ( *quitfans)();                            //粉絲有權選擇退出鳳姐粉絲圈
};
struct Fengjie {
    int fansnum;
    struct Fans fanslist[100];                     //負責通知的粉絲的數量,最多100個粉絲
    void ( *notify) (struct Fengjie* fengjie);     //由鳳姐發出更新通知
    void ( *addfans)(struct Fengjie* fengjie, struct Fans fans);    //鳳姐這邊也可以增加刪除粉絲
 //   void ( *)delfans)();                            //to be done
};
void fan1update(){                                  //不同粉絲收到新資訊後有不同行為
    printf ("fan1 got new news! Unbelievable,Fengjie weight %d now!\n",rand()%10 +50);
}
void fan2update(){                                  //不同粉絲收到新資訊後有不同行為
    printf ("fan2 got new news! Fengjie's new weight is %d , oh my god.\n",rand()%10 +50);
}
void joinfans(struct Fans fans) {
    fans.fengjie->addfans(fans.fengjie, fans);      //粉絲這邊直接呼叫鳳姐的函式來把該粉絲加入粉絲圈
}

void notify (struct Fengjie* fengjie){
    int i;
    for (i = 0; i < fengjie->fansnum; i++)
        fengjie->fanslist[i].update();
}
void addfans (struct Fengjie* fengjie, struct Fans fans) {
    fengjie->fanslist[fengjie->fansnum] = fans;
    fengjie->fansnum++;
}
int main (void) {
    srand((unsigned) time(0));
    struct Fengjie fengjie;
    fengjie.notify = notify, fengjie.addfans = addfans, fengjie.fansnum = 0;

    struct Fans fan1, fan2;
    fan1.fengjie = &fengjie, fan1.joinfans = joinfans, fan1.update = fan1update;
    fan2.fengjie = &fengjie, fan2.joinfans = joinfans, fan2.update = fan2update;
    fan1.joinfans (fan1);
    fan2.joinfans (fan2);

    fengjie.notify (&fengjie);




}

另外可以根據不同的粉絲寫相應的update響應,這又讓我想到了網上說的控制元件選單等對明令的響應。
觀察者只要發現目標有什麼風吹草動就會採取行動,這時該稱為監視者。

相關推薦

設計模式初探 行為模式 觀察模式 c語言 版本實現

上午簡單的學習了觀察者模式,首先想到的是群郵件和微博加粉絲。於是寫了個鳳姐與粉絲的小程式。 我對設計模式是初次學習,理解可能並不準確,只能按照自己的理解去用程式模擬設計模式,希望理解的與其真正含義不要相差太遠為好。 /**設計模式 行為模式 觀察者模式 鳳姐與粉絲 *

C#設計模式之十六觀察模式(Observer Pattern)【行為型】

ngx 現實生活 松耦合 mon html 機制 account current 很好 原文:C#設計模式之十六觀察者模式(Observer Pattern)【行為型】一、引言 今天是2017年11月份的最後一天,也就是2017年11月30日,利用今天再寫一個模式,爭取

設計模式——行為型——觀察模式

在閻巨集博士的《JAVA與模式》一書中開頭是這樣描述觀察者(Observer)模式的:   觀察者模式是物件的行為模式,又叫釋出-訂閱(Publish/Subscribe)模式、模型-檢視(Model/View)模式、源-監聽器(Source/Listener)模式或從屬者(Dependents

Golang設計模式-行為型-觀察模式

引例 某城市氣象站需要你開發一個應用,該應用需要完成如下功能: 儲存氣象站提供的溫度、溼度、PM2.5等氣象資料,並提供更新介面,以便氣象站在氣象資料有更新時呼叫; 提供三種氣象看板:當前天氣看板負責顯示實時溫度和溼度;統計看板負責顯示最近10天的平均溫度和溼

設計模式(一)觀察模式

針對 ray 需求 als bool 模式 null rri 主動 觀察者模式 定義了對象之間的一對多的依賴,這樣一來,當一個對象狀態改變時,他的 多有依賴都會受到通知並自動更新。 本例為一個溫度基站,和三個終端。溫度基站為廣播類WeatherData,三個終端監聽者類分別

[轉] 淺析JavaScript設計模式——發布-訂閱/觀察模式

div 函數 ons class esp 了解 寵物 是我 ring 前一段時間一直在寫CSS3的文章 一直都沒寫設計模式 今天來寫寫大名鼎鼎觀察者模式 先畫張圖 觀察者模式的理解 我覺得還是發布-訂閱模式的叫法更容易我們理解 (不過也有的書上認為它們是兩種模式&h

設計模式(二)—— 觀察模式

pda 發出 dex obs index observe target 獲取 委托事件 觀察者模式類似出版社與訂閱者的關系,訂閱者能夠收到出版社發出的消息,可以取消訂閱。出版社在觀察者模式中稱為主題(Subject)訂閱者稱為觀察者(Observer)。 主

設計模式真香筆記-觀察模式

觀察者模式的介紹 觀察者模式:物件之間一對多依賴,當一個物件改變狀態的時候,它的所有依賴都會收到通知並且自動更新。 這樣說可能有些人不能理解,我們來舉個生動形象的例子: 許多人以前會經常訂閱雜誌,雜誌社會定期發雜誌給訂閱者,當然他也可以取消訂閱,那麼雜誌社就不會繼續發雜誌給訂

設計模式(18)觀察模式

模式介紹 觀察者模式試圖允許物件在其內部狀態改變時通知觀察者。 這意味著單個物件需要知道觀察它的物件,並且當狀態發生變化的時候,需要能夠與那些觀察者通訊。此外,觀察者應該被自動通知。 示例 設想我們需要一個系統來建模本地蔬菜市場中蔬菜價格的波動。 我們需要允許餐館檢視價格,並在特定蔬菜的價格低於指定閾

一看就懂【來自英雄聯盟蓋倫的怒吼】與 Python 詳解設計模式(二)觀察模式

觀察者模式概述 觀察者模式(有時又被稱為模型-檢視(View)模式、源-收聽者(Listener)模式或從屬者模式)是軟體設計模式的一種。在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統

設計模式之禪(2)-觀察模式

文章目錄 一、什麼是觀察者模式 二、通過設計氣象站模組來說明觀察者模式 2.1、觀察者模式設計的一般類圖 2.2、觀察者模式帶來的鬆耦合 2.3、氣象站模組需求 2.4、使用

PHP設計模式(5)—— 觀察模式

基本概念 整個觀察者模式,其實做的就是監聽事件、處理事件。 由此引出兩個角色,一個是觀察者Listener,另一個是事件處理者Handler。 例子 第一步,建立抽象事件類。 它的主要作用是提供兩個方法給具體事件類呼叫。 abstract clas

設計模式(四)觀察模式

繼續設計模式的文章,今天給大家帶來觀察者模式。先來看看觀察者模式的定義:定義了物件之間的一對多的依賴,這樣一來,當一個物件改變時,它的所有的依賴者都會收到通知並自動更新。好了,對於定義的理解總是需要例項來解析的,如今的微信服務號相當火啊,下面就以微信服務號為背景,給大家介紹

設計模式學習筆記】觀察模式

觀察者模式,提供了一種實時監聽方案。定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。[菜鳥] 文章目錄 1.1 被觀察者 1.2 觀察者 1.3 測試 1.4

Head First設計模式 第二章:觀察模式

觀察者模式是JDK中使用最多的模式之一。 氣象監測應用: 任務: WeatherData物件負責追蹤目前的天氣狀況(溫度、溼度、氣壓)。建立一個應用,有三種佈告板,分別顯示目前的狀況、氣象統計及簡單的預報。當WeatherObject 物件獲得最新的測量資料時, 三種佈

Java設計模式學習筆記(觀察模式

觀察者模式說起來很簡單,就是一個訂報紙的模式。但是實際上這部分我覺得還是很有意思的,《Head First設計模式》裡還有一些還沒看完,也是因為理解的不夠深吧。     觀察者模式會包含兩個元件:觀察者和主題。     這段程式碼是主題的介面: package

Java設計模式(4)--觀察模式

今天看了一下觀察者模式,總體來說不難,關鍵是要知道原理和這個模式的用法下面是我自己個人一些理解。 1、定義 觀察者模式,首先得有觀察者,一個或者多個觀察者,它們都依賴於另一個物件,也就是說,這些觀察者都觀察著一個被觀察者。那麼,當被觀察者狀態發生改變

Cocos2d-x設計模式之六 :觀察模式

1、應用場景 前面在介紹單例模式的時候,提到了一個類CCNotificationCenter,它除了應用單例模式以外,還應用了觀察者模式。CCNotificationCenter類是觀察者模式中的目標物件,而CCNotificationObserver則是觀察者。 一個目標物件可以註冊多個觀察者,當目標物件

java設計模式十五(觀察模式

java設計模式—觀察者模式 一.概述 在物件之間定義了一對多的依賴,這樣一來,當一個物件改變狀態,依賴它的物件會收到通知並自動更新。這有點像我們的maven,比如maven的pom.xml刪除某個依賴包時,eclipse裡的程式碼就會做出相應的錯誤提示

Unity遊戲設計模式(二)觀察模式(Observer Pattern)

        最近看遊戲設計模式,當看到觀察者模式時被搞得雲裡霧裡的,什麼觀察者,被觀察者,抽象觀察者,抽象被觀察者。聽著這些詞就覺得可怕,其實理解以後還是比較簡單的。         當我們玩遊戲時,經常會出現一些事件,而這個事件可能會影響到許多個模組時就可以用到觀察者