消息轉(zhuǎn)發(fā)模塊(觀察者模式)

IFramework所有模塊總目錄

簡(jiǎn)介

unity有自己的Message 機(jī)制锄禽,IF 框架 當(dāng)然也要自己搞一個(gè)啊靴姿。IF 框架中的 消息模塊根據(jù)觀察者模式+Type 實(shí)現(xiàn)佛吓。利用IF 框架中的消息模塊,不但可以解除耦合淤刃,而且后續(xù)開(kāi)發(fā)中 需要寫(xiě)的代碼也相對(duì)較少吱型。

消息模塊的使用

使用前說(shuō)明:在C#中,觀察者模式被事件所支持铝侵,使用起來(lái)很方便。那么IF 框架中的 消息模塊 和事件的區(qū)別 在哪里狐赡?
簡(jiǎn)介中提到疟丙,IF的消息轉(zhuǎn)發(fā)模塊 是通過(guò)“Type”實(shí)現(xiàn)享郊,所以 其使用層為:類(lèi)型層。舉個(gè)栗子:定義了貓類(lèi)型(被觀察者)穴墅、老鼠類(lèi)型(觀察者)温自。 那么 一旦實(shí)現(xiàn)了IF框架的觀察者模式悼泌。所有的老鼠對(duì)象,都會(huì)去觀測(cè)每一只貓的動(dòng)向隘世。2000只老鼠鸠踪、1000只貓。每一只老鼠都會(huì)觀察1000只貓械媒,每只貓都被2000只老鼠“盯”著评汰。

代碼如下:

using System;
using UnityEngine;
using IFramework;       // 引入IF命名空間

// 觀察者 需要實(shí)現(xiàn) IObserver 接口
public class MyListenner : IObserver
{
    private string name;
     public MyListenner(string name)
     {      this.name = name;
     // 需要觀測(cè)的類(lèi)型被去。  若有倆個(gè) 類(lèi)型需要被觀察 如下:
           this.Subscribe<MyPublisher>();       // 這里有個(gè)泛型約束:T :IPublisher。
           this.Subscribe<MyPublisher2>();
     }
     // 實(shí)現(xiàn)的接口方法糜值, 將會(huì)在 收到消息 時(shí)被調(diào)用。
     public void Listen(IPublisher publisher, Type eventType, int code, IEventArgs args, params object[] param)
     {
          Log.L(string.Format("Recieve code {0} from type {1}", code,eventType));
          foreach (var item in param)
          {
              
              Log.L($"{name}:{item.ToString()}");
          }
     }
}
// 被觀察者 需要實(shí)現(xiàn) IPublisher 接口
public class MyPublisher:IPublisher{
    public string name;
    public MyPublisher(string name){
        this.name = name;
    }
}

// 另外一種被觀察者 需要實(shí)現(xiàn) IPublisher 接口
public class MyPublisher2:IPublisher{
    public string name;
    public MyPublisher2(string name){
        this.name = name;
    }
}

public class MessageIF : MonoBehaviour
{
    void Start()
    {
        MyListenner listenner1 = new MyListenner("觀察者一號(hào)");
        MyListenner listenner2 = new MyListenner("觀察者二號(hào)");

        MyPublisher publisher = new MyPublisher("終極Boos");
        publisher.Publish(1,null,$"檢測(cè)到{publisher.name}開(kāi)始行動(dòng)","出擊畅蹂!");
        MyPublisher2 publisher2 = new MyPublisher2("雜魚(yú)");
        publisher2.Publish(1,null,$"檢測(cè)到{publisher2.name}開(kāi)始行動(dòng)","出擊!");
    }

   
}


代碼解析:
代碼種累贤,定義了 兩種 “被觀察者”類(lèi)型少漆,一種“觀察者”類(lèi)型臼膏。實(shí)例化時(shí):兩種觀察者各實(shí)例化 一個(gè), 觀察者實(shí)例化 兩個(gè)示损。 用于 區(qū)分 類(lèi)型層和 對(duì)象層上的 的不同渗磅。

最終輸出結(jié)果:

image.png

是不是很簡(jiǎn)單。特別是在大規(guī)模對(duì)象的 消息發(fā)送中检访。我們不用去為每一個(gè)對(duì)象 注冊(cè)事件了始鱼。

結(jié)尾

以上內(nèi)容是 作者個(gè)人的理解,如有錯(cuò)誤脆贵,歡迎指出医清。
順便給出OnClick大佬自己 寫(xiě)的文檔地址:004 消息轉(zhuǎn)發(fā)模塊(觀察者模式)
如果對(duì) IF框架有其他看法,也歡迎大家 進(jìn)群交流卖氨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市筒捺,隨后出現(xiàn)的幾起案子柏腻,更是在濱河造成了極大的恐慌,老刑警劉巖系吭,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件五嫂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡村斟,警方通過(guò)查閱死者的電腦和手機(jī)贫导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蟆盹,“玉大人孩灯,你說(shuō)我怎么就攤上這事∮饫模” “怎么了峰档?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵败匹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我讥巡,道長(zhǎng)掀亩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任欢顷,我火速辦了婚禮槽棍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抬驴。我一直安慰自己炼七,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布布持。 她就那樣靜靜地躺著豌拙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪题暖。 梳的紋絲不亂的頭發(fā)上按傅,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音胧卤,去河邊找鬼唯绍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灌侣,可吹牛的內(nèi)容都是我干的推捐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侧啼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牛柒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起痊乾,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤皮壁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后哪审,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蛾魄,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年湿滓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滴须。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叽奥,死狀恐怖扔水,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情朝氓,我是刑警寧澤魔市,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布主届,位于F島的核電站,受9級(jí)特大地震影響待德,放射性物質(zhì)發(fā)生泄漏君丁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一将宪、第九天 我趴在偏房一處隱蔽的房頂上張望绘闷。 院中可真熱鬧,春花似錦涧偷、人聲如沸簸喂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至扼倘,卻和暖如春确封,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背再菊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工爪喘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纠拔。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓秉剑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親稠诲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侦鹏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容