①簡單工廠模式:簡單工廠模式是由乙個工廠物件根據收到的訊息決定要建立哪乙個類的物件例項,一般需要switch或if進行型別選擇;工廠類建立的物件比較少,客戶只需要傳入工廠類引數,對於如何建立物件不關心;比如有乙個手機工廠,可以加工出蘋果手機和華為手機,客戶給需求說要什麼型別的手機,工廠就可以加工出那種型號的手機
//工廠加工的一般是一類產品,因此不同的手機繼承自乙個基類phone
class
phone
;virtual
void
make()
=0;//virtual void make() ;};
//iphone類
class
iphone
:public phone
void
make()
};//honor類
class
honor
:public phone
void
make()
};//加工手機的工廠類
class
phonefactory
; phone*
makephone
(string s)};
void
main()
②工廠方法模式:定義乙個建立物件的工廠介面,讓工廠的子類決定例項化哪乙個類,將實際建立工作推遲到子類當中。
//首先關於手機還是那三個類,此時將工廠類設為基類,新增了兩個工廠子類
class
abstractfactory
virtual phone*
make_phone()
=0;}
;//生產榮耀手機的車間
class
hono***ctory
:public abstractfactory
phone*
make_phone()
};//生產蘋果手機的車間
class
iphonefactory
:public abstractfactory
phone*
make_phone()
};void
main()
class
singleton
;singleton
(singleton&);
singleton&
operator=(
const singleton&);
static singleton* instance;
public
:static singleton*
getinestance()
;};singleton* singleton::instance =
newsingleton()
;
class
singleton
;singleton
(singleton&);
singleton&
operator=(
const singleton&);
static singleton* instance;
public:~
singleton()
static singleton*
getinestance()
return instance;}}
;singleton* singleton::instance =
nullptr
;
存在兩個問題:
多執行緒競態會出現構造多個物件的情況
記憶體洩漏問題,程式將不會自動呼叫析構函式
class
singleton
;singleton
(singleton&);
singleton&
operator=(
const singleton&);
static mutex mu;
static shared_ptrinstance;
public:~
singleton()
;static shared_ptr
getinestance()
}return instance;}}
;shared_ptr singleton::instance =
nullptr
;mutex singleton::mu;
static shared_ptr
getinestance()
}return instance;
}
執行緒a加鎖進入構造階段時,理論上應該依次執行以下三個步驟:①分配空間②呼叫建構函式③指標指向該記憶體區域。但是由於cpu指令優化,可能會首先為指標分配空間而未呼叫建構函式,如果此時執行緒b呼叫getinstance函式,由於指標已經分配了空間會直接返回,此時指標所指物件並未初始化,進行訪問將出現不可預料的結果。
class
singleton
;singleton
(singleton&);
singleton&
operator=(
const singleton&);
public
:static singleton*
getinestance()
};
面試官常問的設計模式
設計模式分為三大類 建立型模式,共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模式,共七種 介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式。行為型模式,共十一種 策略模式 模板方法模式 觀察者模式 迭代子模式 責任鏈模式 命令模式 備忘錄模式 狀態模...
設計模式15問
優秀的設計範例 從優秀設計方案中發現和總結出來的經驗 在實踐中反覆出現的設計問題的優秀解決方案 設計和開發人員相互交流的基本術語 物件導向設計的框架 可供簡單組合的積木式的設計元件 新發明的創新思路和方法 解決物件導向設計問題的完整方案 一門物件導向的程式語言 一些物件導向的基本概念 一些基礎的um...
Java幾種設計模式
建立型模式 物件的建立 結構型模式 物件的組成 行為型模式 物件的行為 該模式裡面需要提供乙個類 工廠類 用它製造一些需要的物件 特點 構造方法私有化,外界不能直接建立它的物件 提供靜態功能,每一種靜態都會產生所需要的物件.缺點 不利於後期維護 如果新增新的物件,需要建立它的類還需要在靜態工廠類提供...