文章出處

示例代碼詳見https://github.com/52fhy/design_patterns

簡單工廠

簡單工廠模式的工廠類一般是使用靜態方法,通過接收的參數的不同來返回不同的對象實例。

也就是使用的時候通過傳參來確定生成不同的對象。

簡單工廠UML圖:

簡單工廠需要有3個角色:

  • Product接口類:用于定義產品規范;
  • 具體的產品實現,例如ConcreateProductA、ConcreateProductB;
  • 簡單工廠類SimpleFactory:用于生成具體的產品。

使用的時候通過傳參數給簡單工廠類,可以生成想要的產品。

代碼:
ICar.php:定義產品規范:

namespace Yjc\SimpleFactory;

interface ICar
{
    public function driver();
}

具體產品實現:

namespace Yjc\SimpleFactory;

class Benz implements ICar
{
    public function driver()
    {
        echo 'benz driver.';
    }
}

class Bmw implements ICar
{
    public function driver()
    {
        echo 'bmw driver.';
    }
}

簡單工廠類SimpleFactory:

namespace Yjc\SimpleFactory;

class SimpleFactory
{
    public static function makeCar($type){
        switch ($type){
            case 'benz':
                return new Benz();
                break;
            case 'bmw':
                return new Bmw();
                break;
            default:
                throw new \Exception('not support type!');
                break;
        }
    }
}

參數代碼:

$car = SimpleFactory::makeCar('benz');
$car->driver();

簡單工廠的優點/缺點:

優點:簡單工廠模式能夠根據外界給定的信息,決定究竟應該創建哪個具體類的對象。明確區分了各自的職責和權力,有利于整個軟件體系結構的優化。

缺點:很明顯工廠類集中了所有實例的創建邏輯,容易違反GRASPR的高內聚的責任分配原則。

參考:
1、設計模式:簡單工廠、工廠方法、抽象工廠之小結與區別 - superbeck的專欄 - 博客頻道 - CSDN.NET
http://blog.csdn.net/superbeck/article/details/4446177
2、簡單工廠、工廠方法、抽象工廠、策略模式、策略與工廠的區別 - Danny Chen - 博客園
http://www.cnblogs.com/zhangchenliang/p/3700820.html


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()