本篇內容介紹了“PHP抽象工廠模式的優點與實現方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
抽象工廠模式是一種創建型模式,它提供了一種創建一系列相關或相互依賴對象的最佳方式。在抽象工廠模式中,我們定義一個抽象工廠接口,由具體的工廠類來實現該接口,創建一系列相關的對象。
抽象工廠模式可以幫助我們實現松耦合,客戶端代碼無需知道實際創建的對象,只需知道抽象工廠即可;
抽象工廠模式可以幫助我們封裝變化,客戶端代碼無需關心具體對象的創建過程,只需關心抽象工廠即可;
抽象工廠模式可以幫助我們實現單一職責原則,一個類只負責一個職責,由工廠類負責創建對象。
在 PHP 中,我們可以使用以下方式來實現抽象工廠模式:
<?php // 定義抽象產品類(汽車) abstract class Car { protected $brand; protected $type; public function __construct($brand, $type) { $this->brand = $brand; $this->type = $type; } abstract public function run(); } // 定義抽象產品類(手機) abstract class Phone { protected $brand; protected $model; public function __construct($brand, $model) { $this->brand = $brand; $this->model = $model; } abstract public function call(); }
<?php // 定義具體產品類(奔馳汽車) class BenzCar extends Car { public function run() { echo "{$this->brand} {$this->type} is running..." . PHP_EOL; } } // 定義具體產品類(寶馬汽車) class BmwCar extends Car { public function run() { echo "{$this->brand} {$this->type} is running..." . PHP_EOL; } } // 定義具體產品類(蘋果手機) class ApplePhone extends Phone { public function call() { echo "{$this->brand} {$this->model} is calling..." . PHP_EOL; } } // 定義具體產品類(華為手機) class HuaweiPhone extends Phone { public function call() { echo "{$this->brand} {$this->model} is calling..." . PHP_EOL; } }
<?php // 定義抽象工廠類 abstract class AbstractFactory { abstract public function createCar($type); abstract public function createPhone($model); }
<?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.'); } } }
<?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...
“PHP抽象工廠模式的優點與實現方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。