您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“PHP抽象工廠模式的優(yōu)點(diǎn)與實(shí)現(xiàn)方法是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
抽象工廠模式是一種創(chuàng)建型模式,它提供了一種創(chuàng)建一系列相關(guān)或相互依賴對象的最佳方式。在抽象工廠模式中,我們定義一個(gè)抽象工廠接口,由具體的工廠類來實(shí)現(xiàn)該接口,創(chuàng)建一系列相關(guān)的對象。
抽象工廠模式可以幫助我們實(shí)現(xiàn)松耦合,客戶端代碼無需知道實(shí)際創(chuàng)建的對象,只需知道抽象工廠即可;
抽象工廠模式可以幫助我們封裝變化,客戶端代碼無需關(guān)心具體對象的創(chuàng)建過程,只需關(guān)心抽象工廠即可;
抽象工廠模式可以幫助我們實(shí)現(xiàn)單一職責(zé)原則,一個(gè)類只負(fù)責(zé)一個(gè)職責(zé),由工廠類負(fù)責(zé)創(chuàng)建對象。
在 PHP 中,我們可以使用以下方式來實(shí)現(xià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)品類(手機(jī)) abstract class Phone { protected $brand; protected $model; public function __construct($brand, $model) { $this->brand = $brand; $this->model = $model; } abstract public function call(); }
<?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)品類(蘋果手機(jī)) class ApplePhone extends Phone { public function call() { echo "{$this->brand} {$this->model} is calling..." . PHP_EOL; } } // 定義具體產(chǎn)品類(華為手機(jī)) 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抽象工廠模式的優(yōu)點(diǎn)與實(shí)現(xiàn)方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。