PHP設計模式之工廠方法*解讀

「PHP」工廠方法是針對每一種產品提供一個工廠類。經過不一樣的工廠實例來建立不一樣的產品實例。php

相比簡單工廠 ,建立對象這件事再也不交由一個類來建立:把簡單工廠拆分,每一個產品由專門的一個簡單工廠來實現,每一個簡單工廠實現工廠接口類。這樣實如今同一等級結構中,支持增長任意產品。laravel

工廠方法UML圖:面試

官方PHP高級學習交流社羣「點擊」管理整理了一些資料,BAT等一線大廠進階知識體系備好(相關學習資料以及筆面試題)以及不限於:分佈式架構、高可擴展、高性能、高併發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階乾貨sql

簡單工廠須要有4個角色shell

  • Product接口類:用於定義產品規範;設計模式

  • 具體的產品實現,例如ConcreateProductA、ConcreateProductB;服務器

  • 抽象工廠類IFactory:用於規範工廠;架構

  • 具體產品建立的簡單工廠,例如ConcreateFactoryA、ConcreateFactoryB。併發

代碼: 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.';
    }
}

抽象工廠類IFactory:

namespace Yjc\Factory;

interface IFactory
{
    public static function makeCar();
}

具體工廠實現:

namespace Yjc\Factory;

class FactoryBenz implements IFactory
{
    public static function makeCar()
    {
        return new Benz();
    }
}

class FactoryBmw implements IFactory
{
    public static function makeCar()
    {
        return new Bmw();
    }
}

測試:

$car = Factory\FactoryBenz::makeCar();
$car->driver();

思考:若是不使用工廠模式來實現咱們的例子,也許代碼會減小不少——只須要實現已有的車,不使用多態。可是在可維護性上,可擴展性上是很是差的(你能夠想象一下添加一輛車後要牽動的類)。所以爲了提升擴展性和維護性,多寫些代碼是值得的,尤爲是複雜項目裏。

  • 優勢:
  1. 工廠方法模式就很好的減輕了工廠類的負擔,把某一類/某一種東西交由一個工廠生產;(對應簡單工廠的缺點1)

  2. 同時增長某一類」東西「並不須要修改工廠類,只須要添加生產這類」東西「的工廠便可,使得工廠類符合開放-封閉原則。

  • 缺點:
  1. 相比簡單工廠,實現略複雜。

  2. 對於某些能夠造成產品族的狀況處理比較複雜。

  對於缺點2,咱們能夠借用[抽象工廠]來實現。

PHP 互聯網架構師成長之路*「設計模式」終極指南

PHP 互聯網架構師 50K 成長指南+行業問題解決總綱(持續更新)

面試10家公司,收穫9個offer,2020年PHP 面試問題

★若是喜歡個人文章,想與更多資深開發者一塊兒交流學習的話,獲取更多大廠面試相關技術諮詢和指導,歡迎加入咱們的羣-點擊此處

內容不錯的話但願你們支持鼓勵下點個贊/喜歡,歡迎一塊兒來交流;另外若是有什麼問題和想看的內容能夠在評論提出

相關文章
相關標籤/搜索