PHP面向物件-工廠、抽象工廠模式
阿新 • • 發佈:2019-01-01
工廠模式,是用工廠方法代替new操作的一種模式。其實也可以將其理解成為一個建立物件的工具類。在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立的物件。
- 優點:
- 一個呼叫者想建立一個物件,只要知道其名稱就可以了。
- 擴充套件性高,如果想增加一個產品,只要擴充套件一個工廠類就可以。
- 遮蔽產品的具體實現,呼叫者只關心產品的介面。
- 缺點:
每次增加一個產品時,都需要增加一個具體類和物件實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。
- 主要解決:
主要解決介面選擇的問題。
- 何時使用:
我們明確地計劃不同條件下建立不同例項時。
- 應用場景:
- 日誌記錄器:記錄可能記錄到本地硬碟、系統事件、遠端伺服器等,使用者可以選擇記錄日誌到什麼地方。
- 資料庫訪問,當用戶不知道最後系統採用哪一類資料庫,以及資料庫可能有變化時。
- 設計一個連線伺服器的框架,需要三個協議,"POP3"、"IMAP"、"HTTP",可以把這三個作為產品類,共同實現一個介面。
- 實現:
#介面類IApi.php interface IApi{ public function draw(); } #業務類 classA.php class classA implements IApi{ public function draw(){ echo 'classA'; } } #業務類 classB.php class classB implements IApi{ public function draw(){ echo 'classB'; } } #API呼叫 index.php class Factory_Demo{ public function index($type=0) { if($type == 1 ){ $obj = new App\factory\classA(); }else{ $obj = new App\factory\classB(); } $obj->draw(); } } $obj = new Factory_Demo(); $obj ->index(2);
實現效果
抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。
在抽象工廠模式中,介面是負責建立一個相關物件的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供物件。
- 優點
當一個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同一個產品族中的物件。
- 缺點
產品族擴充套件非常困難,要增加一個系列的某一產品,既要在抽象的 Creator 里加程式碼,又要在具體的裡面加程式碼。
- 主要解決:
主要解決介面選擇的問題。
- 何時使用:
系統的產品有多於一個的產品族,而系統只消費其中某一族的產品。
- 應用場景
- QQ 換面板,一整套一起換。
- 生成不同作業系統的程式。
- 商城的產品類別
- 實現