1. 程式人生 > >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('*');