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

【個人紀錄】C++面試總結之三(設計模式)
不嚴謹之處較多,歡迎大佬指正,在學習的路上不斷狂奔
比如面試官問了一個設計模式問題,然後就可以針對設計模式這個問題適當展開,不至於問你一個就回答這一個問題,無法完全展示自己技能,適當的展開可以爲面試加分喲
開始:
C++中常用的設計模式有:單例模式、工廠模式、策略模式、適配器模式、原型模式、模板模式、建造者模式、外觀模式、組合模式、代理模式、享元模式、橋接模式、裝飾模式、備忘錄模式、中介者模式、職責鏈模式、觀察者模式等。
簡單描述一下工廠模式
工廠模式分爲:簡單工廠模式、工廠方法模式、抽象工廠模式。組要解決接口選擇的問題。
(1)、簡單工廠模式:主要特點是需要在工廠類中做判斷,從而創造相應的產品,當新增新產品時,需要修改工廠類。
(2)、工廠方法模式:是指定義一個創建對象的接口,讓子類決定實例化哪一個類,使一個類的實例化延遲到子類。每增加一種產品,就需要增加一個對象工廠,相比於簡單工廠模式,工廠方法模式需要定義更多的類。
(3)、抽象工廠模式:提供一個創建一系列相關或相互依賴的對象接口,而無需指定他們的具體類。該方法擴展非常困難,要增加一個系列的某一產品,需要從上往下都要加代碼。








簡單描述一下單例模式
單例模式一句話的來講就是,這個類只存在一個實例化對象。
之前總結的單例模式內含有代碼片段:淺析單例模式

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




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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章