系統架構三日談 二 物件間的連線

2021-04-15 22:44:58 字數 1173 閱讀 1921

我們知道,常見的網路拓撲結構主要有:星型,環型,全連線,匯流排型。

那麼在設計軟體時,我們可以參考以上幾種形式來實現物件與物件之間的連線。

問題:如何將物件a,b,c用匯流排型(軟匯流排)進行連線?

方法:感覺好象沒這個必要,真要實現可用事件驅動進行模擬?

問題:設有三個物件abc,a收到訊息後,要依次傳送至b和c,怎麼做?

方法:將a,b,c,用鍊錶連線。這類似於環型,在設計模式中稱責任鏈。

問題:設有物件a和b,要把二個物件串起來,怎麼做?

方法:a中設乙個指向b的指標,b中設乙個指向a的指標,這是物件導向設計中最為常見的手法。

問題: 設有物件a,b,c,要把三個物件串起來,怎麼做?

方法1:全連線

你還是可以採用a中設兩個指標,分別指向b,c;b中也設兩個指標分別指向a,c;c中設兩指標指向a和b。這種連線方式就是全連線型。缺點是占用空間,指標的維護麻煩;優點是訪問物件快速,一步到位。

方法2:星型

你可以先建乙個base物件,其內部設三個指標,分別指向a,b,c;再在a,b,c中分別設乙個指標指向base物件。這樣在a物件中要訪問b物件時,可先訪問base物件,再通過base訪問b物件。這種通訊方式就是所謂的星型。此方式的特點是訪問物件的速度還可以,兩步到位,指標維護的工作量也不大。

舉例:(1) linux核心中有個全域性變數current,任務切換後做的第一件事就是更新這個指標。我感覺這種current型的指標就是採用星型的設計。

(2) 在設計web server時,當accept乙個來自於browser的連線時,就需要建立乙個socket物件或結構 (不僅僅是socket fd,通常還要包括port,hostname等),還要建立乙個請求控制塊httprequest(包括http version,content-length等),準備用來解析http, 在解析完http頭進入應用指令碼(asp)時,有時要建立(或拾取)乙個session,如何把socket,httprequest,session這三個物件串起來?(即在任何乙個物件中都可訪問另外兩個物件)。

此時用星形設計就比較好。即設乙個全域性性的物件(或結構變數)server,內含三個指標,分別指向這三種物件,而在socket,httprequest,session中各設乙個指標指向server,偽碼如下:

typedef 

struct

server 

......

女子三日不斷藕,男子三日不斷姜 養生篇

一 1 大蒜是個寶,常吃身體好 2 一日兩蘋果,毛病繞道過 3 一日一棗,長生不老 4 核桃山中寶,補腎又健腦 5 鐵不冶煉不成鋼,人不養生不健康二 1 胡蘿蔔,小人參 經常吃,長精神 2 西紅柿,營養好,貌美年輕疾病少 3 小小黃瓜是個寶,美容少不了 4 多吃芹菜不用問,降低血壓很管用 5 大蔥蘸...

4 18,19,20三日學習日誌彙總

這三天主要的工作是 新增complex演算法的一些介面和info的 新增演算法設定的相關 經過三天的努力,放棄了週末,complex演算法終於跑通了,要感謝老師和師兄的耐心地幫助 感恩 complex演算法雖能跑通,但仍然存在問題,無法收斂,這個只能留待後面解決,可能是opb3.0的演算法本身 問題...

SpringBoot 三 日誌檔案

總結 1 springboot底層使用slf4 logback的方式進行日誌記錄 2 springboot將其他的日誌檔案都替換成slf4.3 中間包替換?4 如果我們要引入其他框架?一定要把這個框架的預設配置移除掉 要不包名類名一直則衝突 如下圖 springboot日誌檔案配置預設是info級別...