「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)
同時增長某一類」東西「並不須要修改工廠類,只須要添加生產這類」東西「的工廠便可,使得工廠類符合開放-封閉原則。
相比簡單工廠,實現略複雜。
對於某些能夠造成產品族的狀況處理比較複雜。
對於缺點2,咱們能夠借用[抽象工廠]來實現。
PHP 互聯網架構師 50K 成長指南+行業問題解決總綱(持續更新)
面試10家公司,收穫9個offer,2020年PHP 面試問題
★若是喜歡個人文章,想與更多資深開發者一塊兒交流學習的話,獲取更多大廠面試相關技術諮詢和指導,歡迎加入咱們的羣-點擊此處。
內容不錯的話但願你們支持鼓勵下點個贊/喜歡,歡迎一塊兒來交流;另外若是有什麼問題和想看的內容能夠在評論提出