成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

說完觀察者和發布訂閱模式的區別,面試官不留我吃飯了

開發 前端
來到心儀已久的公司面試,剛推開門還沒等我說話HR 小姐姐就主動問我:你是來參加面試的吧?

 [[356449]]

本文轉載自微信公眾號「愛笑的架構師」,作者雷架。轉載本文請聯系愛笑的架構師公眾號。  

來到心儀已久的公司面試,剛推開門還沒等我說話HR 小姐姐就主動問我:你是來參加面試的吧?

我心想不對啊:難道是因為我長的帥,小姐姐一眼就看出來我將來是這棟樓的主人,所以才主動跟我打招呼。

我昂起頭,略微點點頭:是的。

HR小姐姐:面試官馬上就過來,我先帶你去會議室。

在去會議室的路上,我發現大家脖子上都帶著亮閃閃的工牌,我下意識的看了看我的脖子上,除了昨天沒有洗澡留下來的一點汗漬啥也沒有。

原來是因為我沒帶工牌才認出我的,頓時我的臉滾燙滾燙的,我承認剛才我有點自戀了。

HR小姐姐:怎么了,你臉怎么紅通通的,是不舒服嗎?

我摸了摸臉:沒有沒有,面試有點緊張,害。

來到會議室,HR 小姐姐給我遞過一杯水:面試官臨時有個會,你稍微等一會。

我:好的。

我心里咕嚕:怎么突然有個會,會不會是因為看了我的簡歷覺得我菜,故意找了一個借口,待會肯定讓 HR 過來說面試太忙今天不面了。

果不其然,門開了,一位頭發油油的滿臉是痘的中年大叔向我走來。

我心想:這不會就是傳說中的架構師吧。看來還是很看重我啊,第一面就派一個架構師來面我,我得好好表現一下。

架構師:你就是xxx 吧,剛才有個會議我來晚了,我們開始面試吧,一分鐘簡單介紹一下自己。

果然沒有猜錯,給我一分鐘介紹,幸虧之前是按照一分鐘準備的,我要開始背了。

我張嘴一笑,露出自信的大牙:尊敬的架構師你好,我是 xxx,之前在上一家公司擔任……

架構師點點頭:很好。我看你簡歷上寫了很多技能,你挑一個你最熟悉的。

我有點凌亂了:架構師怎么不按套路出牌,應該會問我 HashMap 的源碼,Java 鎖的機制等。我想了想我比較熟悉的:Java 集合類、JVM、多線程、spring 全家桶,我如果說這些肯定會被架構師鄙視,差點忘了我還有一個殺手锏:設計模式。

我拍了拍胸脯:架構師你好,我之前參與項目重構用到了很多設計模式,要不你問我設計模式的東西吧。

架構師:那你說說觀察者模式和發布訂閱模式的區別?

我腦海立刻閃現《Head First設計模式》里面講的:Publishers + Subscribers = Observer Pattern,問這么簡單的問題難道是看不起我嗎。

我內心無比激動,嘴角露出勝利者的微笑:親愛的架構師,我之前看過一本書《Head First 設計模式》,這里面講的觀察者模式和發布訂閱模式是等同關系的,它們是一回事。

架構師也笑了:不,它們不一樣。

此刻我慌了,雙手有點輕微顫抖,我哪里錯了,它們明明是相等的。

架構師:我待會還有個會,要不今天的面試先到這里,你回家等消息吧。

回家后我心不甘,決定要把觀察者模式和發布訂閱模式搞清楚,通過一頓谷歌后我寫了下面這些筆記:

觀察者模式

觀察者模式一般有觀察者和被觀察者。舉個例子:大家在學校上自習的時候,等老師走了有些人會玩手機、吃零食、交頭接耳找隔壁妹妹聊天,但是被老師發現可就不好了,所以大家想了一個招,讓坐在最后排的同學幫忙“放風”,老師一來就給大家一個手勢通知大家,大家就繼續裝好好學生(哈嘿)。

這其實就是一個典型的觀察者模式,“放風”的同學是被觀察者,玩手機、吃零食的同學是觀察者,大家都在觀察“放風”同學的手勢,一旦老師來了,被觀察者就會通知大家。

好了,讓我們看看 UML 建模是如何定義的。

觀察者模式定義對象間一種一對多的依賴關系,使得每當一個對象改變狀態,則所有依賴于它的對象都會得到通知并自動更新。

UML結構圖如下:

Subject類是主題,它把所有對觀察者對象的引用文件存在了一個集合里,每個主題都可以有任何數量的觀察者。它是一個抽象主題,提供了一個可以增加和刪除觀察者對象的接口。

Observer類是抽象觀察者,為所有的具體觀察者定義一個接口,在得到主題的通知時更新自己。

ConcreteSubject類是具體主題,將有關狀態存入具體觀察者對象,在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。

ConcreteObserver是具體觀察者,實現抽象觀察者角色所要求的更新接口,以便使本身的狀態與主題的狀態相協同。

發布訂閱模式

舉個生活中的例子,比如我們想要訂閱一份國家地理雜志,一般需要我們先向郵局申請(付錢),告訴郵局我要訂閱這份雜志,苦等數日雜志終于印刷好了,這個時候我們不會直接跑到印刷廠里去,而是等印刷廠將雜志送給郵局,然后郵局才會慢吞吞地將雜志送到家(推模式),如果你實在等不及了跑到郵局直接取雜志,恭喜你學會了“拉模式”。

用專業術語來解釋發布訂閱模式:

訂閱者把自己想訂閱的事件注冊到調度中心,當該事件觸發時候,發布者發布該事件到調度中心(順帶上下文),由調度中心統一調度訂閱者注冊到調度中心的處理代碼。

在發布訂閱模式里發布者并不會直接通知訂閱者,換句話說發布者和訂閱者彼此互不感知。

那發布者和訂閱者如何交流呢?答案是通過中間的調度中心。

發布者將消息發送給調度中心,告訴它你幫我把消息放到 Topic1中。

訂閱者告訴調度中心,我需要訂閱 topic1,你幫我留意一下。

當有消息來了,訂閱者可以采取拉模式或者推模式來獲取消息。

有態度的總結

話不多說,先上一張圖:

從表面上看:

  • 觀察者模式里只有兩個角色:觀察者和被觀察者。
  • 發布訂閱模式里有三種角色:發布者、訂閱者、調度器(第三者)。

往更深層次講:

  • 觀察者和被觀察者是松耦合的關系。
  • 發布者和訂閱者則完全不存在耦合。

從使用層面上講:

  • 觀察者模式經常用于單個應用內部。
  • 發布訂閱模式更多是一種跨應用的模式(cross-application pattern),比如我們常用的消息中間件Kafka 等。

綜上:觀察者模式和發布訂閱模式本質上都有發布訂閱的思想,但是又有一定的區別,所以我們不能將二者完全等同起來。

閑聊:冬天到了一起抱團取暖吧~ 大家有任何技術問題、職業發展方向問題都可以加我的個人微信號咨詢,想進讀者群可以備注”加群“,群里人可好了,微信搜索 smileCoder1024 值得擁有。

 

責任編輯:武曉燕 來源: 愛笑的架構師
相關推薦

2021-11-08 11:32:01

觀察

2021-08-02 17:21:08

設計模式訂閱

2020-10-26 08:45:39

觀察者模式

2021-09-06 10:04:47

觀察者模式應用

2022-01-29 22:12:35

前端模式觀察者

2013-11-26 17:09:57

Android設計模式

2021-07-08 11:28:43

觀察者模式設計

2011-04-29 09:22:22

2024-12-03 09:34:35

觀察者模 式編程Javav

2021-06-03 12:26:28

觀察者模式面試阿里P6

2024-06-04 13:11:52

Python行為設計模式開發

2025-03-10 11:40:00

前端開發HTML

2025-03-10 00:00:00

property?attributeHTML

2012-08-27 10:52:20

.NET架構觀察者模式

2021-03-29 07:14:28

Spring觀察者模式

2022-05-16 11:04:43

RocketMQPUSH 模式PULL 模式

2024-02-18 12:36:09

2015-11-25 11:10:45

Javascript設計觀察

2021-04-14 14:40:37

forSpringJava

2009-03-30 09:39:04

觀察者思想換位設計模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲成av人片在线观看桃 | 欧美日韩在线精品 | 国产精品91视频 | 美女黄网 | 成人免费看片网 | 请别相信他免费喜剧电影在线观看 | 亚洲欧美日本国产 | 国产精品久久一区 | 成人免费在线观看视频 | 国产精品一区二区av | 欧美在线视频一区二区 | 91福利影院| 日本高清视频在线播放 | 国产精品综合一区二区 | 一级毛片中国 | 欧美日韩免费视频 | 色婷婷久久久久swag精品 | 九九国产在线观看 | 婷婷免费在线 | 亚州综合在线 | 一二三在线视频 | 亚洲精品一二区 | 中文字幕一区二区三区日韩精品 | 日韩视频在线免费观看 | www久久99| 日韩欧美在线一区 | 国产中文区二幕区2012 | 91久久久久 | 大象一区| 日韩福利在线 | 成人国产一区二区三区精品麻豆 | 久久精品电影 | 亚洲精久久 | 国产精品国产精品国产专区不卡 | 日韩中文在线观看 | 综合久久亚洲 | 亚洲97 | 国产天堂 | 日本大香伊一区二区三区 | 免费成人高清 | 91在线视频免费观看 |