【個人紀錄】C++面試總結之三(設計模式)

All In !!!發表於2020-09-29

【個人紀錄】C++面試總結之三(設計模式)

由於本人是菜鳥級別,不嚴謹之處較多,歡迎大佬指正,在學習的路上不斷狂奔

比如面試官問了一個設計模式問題,然後就可以針對設計模式這個問題適當展開,不至於問你一個就回答這一個問題,無法完全展示自己技能,適當的展開可以為面試加分喲

開始:

C++中常用的設計模式有:單例模式、工廠模式、策略模式、介面卡模式、原型模式、模板模式、建造者模式、外觀模式、組合模式、代理模式、享元模式、橋接模式、裝飾模式、備忘錄模式、中介者模式、職責鏈模式、觀察者模式等。

簡單描述一下工廠模式

工廠模式分為:簡單工廠模式、工廠方法模式、抽象工廠模式。組要解決介面選擇的問題。
(1)、簡單工廠模式:主要特點是需要在工廠類中做判斷,從而創造相應的產品,當新增新產品時,需要修改工廠類。
(2)、工廠方法模式:是指定義一個建立物件的介面,讓子類決定例項化哪一個類,使一個類的例項化延遲到子類。每增加一種產品,就需要增加一個物件工廠,相比於簡單工廠模式,工廠方法模式需要定義更多的類。
(3)、抽象工廠模式:提供一個建立一系列相關或相互依賴的物件介面,而無需指定他們的具體類。該方法擴充套件非常困難,要增加一個系列的某一產品,需要從上往下都要加程式碼。

簡單描述一下單例模式

單例模式一句話的來講就是,這個類只存在一個例項化物件。
之前總結的單例模式內含有程式碼片段:https://blog.csdn.net/hwx802746/article/details/104976730

如何實現例項化?

既然只能有一個例項化物件,那麼就要防止被多次例項化,如何防止?就要把建構函式私有化或者受保護,這樣建構函式就無法被外部呼叫,只能被類內部的成員函式呼叫,所以我們需要定義一個公有函式來供外部使用,這個公有函式返回一個物件,為了保證多次呼叫這個公有函式都會返同一個物件,就需要將這個給物件設定為靜態的。
簡單總結一下需要注意三點:
一、建構函式需要私有或者受保護;
二、定義靜態物件;
三、定義靜態公有函式

單例模式分為懶漢模式和餓漢模式。
懶漢模式,一開始不例項化,等到呼叫的時候才進行例項化,顧名思義,比較懶,用時間換空間。
餓漢模式,一開始就進行了例項化,顧名思義,比較餓,用空間換時間。

餓漢模式為什麼比懶漢模式使用起來更安全?

餓漢比懶漢更安全主要體現線上程安全上面,原因如下:
假如是懶漢模式,執行緒一在呼叫公有函式時,判斷p是空,進行初始化,執行緒二也在呼叫該公有函式,也在判斷p是空,也給他初始化。兩個執行緒同時再給他初始化豈不是亂套!但是如果是餓漢模式,由於一開始就已經給p初始化了,多個執行緒在呼叫公有函式時,直接拿即可,不存在任何問題,也就避免了懶漢的那種尷尬情況。

雖然說在懶漢的公有函式裡給判斷前後加個鎖可以有效解決這個問題,但是即使這樣,和餓漢比起來會很繁瑣,故孰優孰劣,大家懂的。

相關文章