2018/11/27《大話設計模式》【工廠模式】
阿新 • • 發佈:2018-11-27
新功能終於今天提測,送了一口小氣~
一:什麼是工廠模式?
- 所謂工廠模式,就是有一種工廠的思維,通過工廠一系列的操作,生成的統一的物件。
- 工廠模式的出現就是為了解決程式碼之間的耦合度,通過 “工廠出去” 的物件,可以更方便的進行類的 修改/新增/刪除 等等,而不需要大規模的去修改程式碼。
- 工廠模式簡單分為 簡單工廠/工廠方法,下面會去講一下他們的使用和區別
二:簡單工廠模式?
- 簡單工廠就和他的名字一樣,雖然簡單,但是卻有著很大的作用。
- 最大的優點在於,工廠類中包含了必要的邏輯判斷,值通過客戶端的選擇去動態的例項化。
- 對於客戶端來說,這樣去除
- 就像下面這個簡單計算器一樣,客戶端只需要傳對應的條件就可以,工廠會自動給出相對的例項,客戶端並不需要知道工廠做了什麼
// 簡單計算器例項
class easyFactory { public function CreateOpera($type) { switch ($type) { case '+': return new 加法類(); break; case '-': return new減法類(); break; case '*': return new 乘法類(); break; } } } $opera = new easyFactory(); // 加法 $instance = $opera->CreateOpera('+'); // 減法 $instance = $opera->CreateOpera('-'); // 乘法 $instance = $opera->CreateOpera('*');
三:工廠模式
- 簡單工廠模式,適用於條件變化不是很多的 Case, 在頻繁的開放擴充套件中,也修改工廠類,這樣也就違反了 面向物件原則 :開放-封閉原則
- 於是,工廠模式就出現了。
- 定義:定義一個用於建立物件的介面,讓子類決定例項化到那個類,工廠方法使得例項化一個類延遲到子類。
- 簡單來說,就是由客戶端來決定例項化那個,把邏輯放到了客戶端中。這樣也就避免了去修改工廠函式,而對工廠的開放擴充套件
// 工廠方法 interface Factory { function getOpera(); } class Add implements Factory { public function getOpera(argument) { return new 加法類(); } } class Reduce implements Factory { public function getOpera(argument) { return new 減法類(); } } class Ride implements Factory { public function getOpera(argument) { return new 乘法類(); } } // 加法 $opera = new Add(); $instance = $opera->getOpera('+'); // 減法 $opera = new Reduce(); $instance = $opera->CreateOpera('-'); // 乘法 $opera = new Ride(); $instance = $opera->CreateOpera('*');