PHP工廠方法模式的好處是:核心類只需要關(guān)注工廠類的接口,而具體的產(chǎn)品實例交給具體的工廠子類去創(chuàng)建。在該模式下,通過定義一個抽象的核心工廠類,并定義創(chuàng)建產(chǎn)品的接口,使創(chuàng)建具體產(chǎn)品實例的工作延遲到其工廠子類去完成。
本文操作環(huán)境:Windows10系統(tǒng)、PHP7.1版、Dell G3電腦。
php工廠方法模式的好處是什么
此模式中,通過定義一個抽象的核心工廠類,并定義創(chuàng)建產(chǎn)品對象的接口,創(chuàng)建具體產(chǎn)品實例的工作延遲到其工廠子類去完成。
這樣做的好處是核心類只關(guān)注工廠類的接口定義,而具體的產(chǎn)品實例交給具體的工廠子類去創(chuàng)建。當(dāng)系統(tǒng)需要新增一個產(chǎn)品,無需修改現(xiàn)有系統(tǒng)代碼,只需要添加一個具體產(chǎn)品類和其對應(yīng)的工廠子類,是系統(tǒng)的擴(kuò)展性變得很好,符合面向?qū)ο缶幊痰拈_閉原則。
<?php interface Animal{ public function run(); public function say(); } class Cat implements Animal { public function run(){ echo "I ran slowly <br>"; } public function say(){ echo "I am Cat class <br>"; } } class Dog implements Animal { public function run(){ echo "I'm running fast <br>"; } public function say(){ echo "I am Dog class <br>"; } } abstract class Factory{ abstract static function createAnimal(); } class CatFactory extends Factory { public static function createAnimal() { return new Cat(); } } class DogFactory extends Factory { public static function createAnimal() { return new Dog(); } } $cat = CatFactory::createAnimal(); $cat->say(); $cat->run(); $dog = DogFactory::createAnimal(); $dog->say(); $dog->run();
工廠方法模式是簡單工廠模式的進(jìn)一步抽象和推廣。由于使用了面向?qū)ο蟮亩鄳B(tài)性,工廠方法模式保持了簡單工廠模式的優(yōu)點,而且克服了它的缺點。在工廠方法模式中,核心的工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建工作交給子類去做。
這個核心類僅僅負(fù)責(zé)給出具體工廠必須實現(xiàn)的接口,而不負(fù)責(zé)產(chǎn)品類被實例化這種細(xì)節(jié),這使得工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進(jìn)新產(chǎn)品。
推薦學(xué)習(xí):《PHP視頻教程》