PHP抽象工廠模式Abstract Factory Pattern優(yōu)點與實現(xiàn)方式
抽象工廠模式Abstract Factory Pattern是什么
抽象工廠模式是一種創(chuàng)建型模式,它提供了一種創(chuàng)建一系列相關(guān)或相互依賴對象的最佳方式。在抽象工廠模式中,我們定義一個抽象工廠接口,由具體的工廠類來實現(xiàn)該接口,創(chuàng)建一系列相關(guān)的對象。
抽象工廠模式的優(yōu)點
- 抽象工廠模式可以幫助我們實現(xiàn)松耦合,客戶端代碼無需知道實際創(chuàng)建的對象,只需知道抽象工廠即可;
- 抽象工廠模式可以幫助我們封裝變化,客戶端代碼無需關(guān)心具體對象的創(chuàng)建過程,只需關(guān)心抽象工廠即可;
- 抽象工廠模式可以幫助我們實現(xiàn)單一職責(zé)原則,一個類只負責(zé)一個職責(zé),由工廠類負責(zé)創(chuàng)建對象。
抽象工廠模式的實現(xiàn)
在 PHP 中,我們可以使用以下方式來實現(xiàn)抽象工廠模式:
1. 定義抽象產(chǎn)品類
<?php // 定義抽象產(chǎn)品類(汽車) abstract class Car { protected $brand; protected $type; public function __construct($brand, $type) { $this->brand = $brand; $this->type = $type; } abstract public function run(); } // 定義抽象產(chǎn)品類(手機) abstract class Phone { protected $brand; protected $model; public function __construct($brand, $model) { $this->brand = $brand; $this->model = $model; } abstract public function call(); }
2. 定義具體產(chǎn)品類
<?php // 定義具體產(chǎn)品類(奔馳汽車) class BenzCar extends Car { public function run() { echo "{$this->brand} {$this->type} is running..." . PHP_EOL; } } // 定義具體產(chǎn)品類(寶馬汽車) class BmwCar extends Car { public function run() { echo "{$this->brand} {$this->type} is running..." . PHP_EOL; } } // 定義具體產(chǎn)品類(蘋果手機) class ApplePhone extends Phone { public function call() { echo "{$this->brand} {$this->model} is calling..." . PHP_EOL; } } // 定義具體產(chǎn)品類(華為手機) class HuaweiPhone extends Phone { public function call() { echo "{$this->brand} {$this->model} is calling..." . PHP_EOL; } }
3. 定義抽象工廠類
<?php // 定義抽象工廠類 abstract class AbstractFactory { abstract public function createCar($type); abstract public function createPhone($model); }
4. 定義具體工廠類
<?php // 定義具體工廠類(德國工廠) class GermanFactory extends AbstractFactory { public function createCar($type) { switch ($type) { case 'Benz': return new BenzCar('Benz', 'C200L'); case 'Bmw': return new BmwCar('Bmw', 'X3'); default: throw new Exception('Undefined car type.'); } } public function createPhone($model) { switch ($model) { case 'iPhone': return new ApplePhone('Apple', 'iPhone 11'); case 'Huawei': return new HuaweiPhone('Huawei', 'Mate 30'); default: throw new Exception('Undefined phone model.'); } } } // 定義具體工廠類(中國工廠) class ChineseFactory extends AbstractFactory { public function createCar($type) { switch ($type) { case 'Benz': return new BenzCar('奔馳', 'C200L'); case 'Bmw': return new BmwCar('寶馬', 'X3'); default: throw new Exception('Undefined car type.'); } } public function createPhone($model) { switch ($model) { case 'iPhone': return new ApplePhone('蘋果', 'iPhone 11'); case 'Huawei': return new HuaweiPhone('華為', 'Mate 30'); default: throw new Exception('Undefined phone model.'); } } }
5. 使用
<?php // 使用德國工廠 $germanFactory = new GermanFactory(); $car1 = $germanFactory->createCar('Benz'); $car1->run(); // output: Benz C200L is running... $phone1 = $germanFactory->createPhone('iPhone'); $phone1->call(); // output: Apple iPhone 11 is calling... // 使用中國工廠 $chineseFactory = new ChineseFactory(); $car2 = $chineseFactory->createCar('Bmw'); $car2->run(); // output: 寶馬 X3 is running... $phone2 = $chineseFactory->createPhone('Huawei'); $phone2->call(); // output: 華為 Mate 30 is calling...
總結(jié)
抽象工廠模式是一種非常常見的創(chuàng)建型模式,它可以幫助我們封裝變化,實現(xiàn)松耦合,同時遵循單一職責(zé)原則。在實際開發(fā)中,我們可以根據(jù)具體的需求,選擇不同的抽象工廠模式來實現(xiàn)一系列相關(guān)對象的創(chuàng)建。
到此這篇關(guān)于PHP抽象工廠模式Abstract Factory Pattern優(yōu)點與實現(xiàn)方式的文章就介紹到這了,更多相關(guān)PHP抽象工廠模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php中curl和file_get_content的區(qū)別
抓取遠程內(nèi)容,之前一直都在用file_get_content函數(shù),其實早就知道有curl這么一個好東西的存在,但是看了一眼后感覺使用頗有些復(fù)雜,沒有file_get_content那么簡單,再就是需求也不大,所以沒有學(xué)習(xí)使用curl2014-05-05PHP Socket網(wǎng)絡(luò)操作類定義與用法示例
這篇文章主要介紹了PHP Socket網(wǎng)絡(luò)操作類定義與用法,結(jié)合實例形式分析了php socket網(wǎng)絡(luò)操作類的定義及結(jié)合ajax發(fā)送查詢請求等相關(guān)使用技巧,需要的朋友可以參考下2017-08-08