PHP工廠模式Factory Pattern的實(shí)現(xiàn)及特點(diǎn)
工廠模式(Factory Pattern)是什么
工廠模式是一種創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。在工廠模式中,我們在創(chuàng)建對(duì)象時(shí)不會(huì)向客戶端暴露創(chuàng)建邏輯,而是使用一個(gè)共同的接口來指向新創(chuàng)建的對(duì)象。
工廠模式的優(yōu)點(diǎn)
- 工廠模式可以幫助我們實(shí)現(xiàn)松耦合,它將客戶端代碼與實(shí)際創(chuàng)建對(duì)象的代碼分離開來;
- 工廠模式可以幫助我們封裝變化,客戶端代碼無需知道實(shí)際創(chuàng)建的對(duì)象,只需知道工廠即可;
- 工廠模式可以幫助我們實(shí)現(xiàn)單一職責(zé)原則,一個(gè)類只負(fù)責(zé)一個(gè)職責(zé),由工廠類負(fù)責(zé)創(chuàng)建對(duì)象。
工廠模式的實(shí)現(xiàn)
在 PHP 中,我們可以使用以下方式來實(shí)現(xiàn)工廠模式:
1. 簡單工廠模式
簡單工廠模式是一種將創(chuàng)建邏輯封裝在一個(gè)類中的工廠模式。在簡單工廠模式中,我們使用一個(gè)工廠類來創(chuàng)建所有的對(duì)象,根據(jù)傳入的參數(shù)不同來返回不同的對(duì)象實(shí)例。
<?php
// 定義接口
interface Car
{
public function run();
}
// 實(shí)現(xiàn)接口
class Benz implements Car
{
public function run()
{
echo 'Benz is running...';
}
}
// 實(shí)現(xiàn)接口
class Bmw implements Car
{
public function run()
{
echo 'Bmw is running...';
}
}
// 工廠類
class CarFactory
{
public static function createCar($type)
{
switch ($type) {
case 'Benz':
return new Benz();
case 'Bmw':
return new Bmw();
default:
throw new Exception('Undefined car type.');
}
}
}
// 使用
$car1 = CarFactory::createCar('Benz');
$car1->run(); // output: Benz is running...
$car2 = CarFactory::createCar('Bmw');
$car2->run(); // output: Bmw is running...2. 工廠方法模式
工廠方法模式是一種將對(duì)象的創(chuàng)建委托給具體的工廠類來完成的工廠模式。在工廠方法模式中,我們定義一個(gè)創(chuàng)建對(duì)象的接口,由子類來決定實(shí)例化哪個(gè)類。
<?php
// 定義接口
interface Car
{
public function run();
}
// 實(shí)現(xiàn)接口
class Benz implements Car
{
public function run()
{
echo 'Benz is running...';
}
}
// 實(shí)現(xiàn)接口
class Bmw implements Car
{
public function run()
{
echo 'Bmw is running...';
}
}
// 定義工廠接口
interface CarFactory
{
public function createCar();
}
// 實(shí)現(xiàn)工廠接口
class BenzFactory implements CarFactory
{
public function createCar()
{
return new Benz();
}
}
// 實(shí)現(xiàn)工廠接口
class BmwFactory implements CarFactory
{
public function createCar()
{
return new Bmw();
}
}
// 使用
$benzFactory = new BenzFactory();
$car1 = $benzFactory->createCar();
$car1->run(); // output: Benz is running...
$bmwFactory = new BmwFactory();
$car2 = $bmwFactory->createCar();
$car2->run(); // output: Bmw is running...3. 抽象工廠模式
抽象工廠模式是一種將多個(gè)對(duì)象的創(chuàng)建委托給具體的工廠類來完成的工廠模式。在抽象工廠模式中,我們定義一個(gè)抽象工廠接口,由具體的工廠類來實(shí)現(xiàn)該接口,創(chuàng)建多個(gè)相關(guān)的對(duì)象。
<?php
// 定義接口
interface Car
{
public function run();
}
// 實(shí)現(xiàn)接口
class Benz implements Car
{
public function run()
{
echo 'Benz is running...';
}
}
// 實(shí)現(xiàn)接口
class Bmw implements Car
{
public function run()
{
echo 'Bmw is running...';
}
}
// 定義抽象工廠接口
interface CarFactory
{
public function createBenz();
public function createBmw();
}
// 實(shí)現(xiàn)抽象工廠接口
class Factory implements CarFactory
{
public function createBenz()
{
return new Benz();
}
public function createBmw()
{
return new Bmw();
}
}
// 使用
$factory = new Factory();
$car1 = $factory->createBenz();
$car1->run(); // output: Benz is running...
$car2 = $factory->createBmw();
$car2->run(); // output: Bmw is running...總結(jié)
工廠模式是一種非常常見的創(chuàng)建型模式,它可以幫助我們封裝變化,實(shí)現(xiàn)松耦合,同時(shí)遵循單一職責(zé)原則。在實(shí)際開發(fā)中,我們可以根據(jù)具體的需求,選擇不同的工廠模式來實(shí)現(xiàn)對(duì)象的創(chuàng)建。
到此這篇關(guān)于PHP工廠模式Factory Pattern的實(shí)現(xiàn)及特點(diǎn)的文章就介紹到這了,更多相關(guān)PHP工廠模式Factory Pattern內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP的命令行擴(kuò)展Readline相關(guān)函數(shù)的使用
PHP 作為一個(gè) Web 開發(fā)語言,相對(duì)來說,命令行程序并不是它的主戰(zhàn)場。所以很多年輕的 PHP 開發(fā)者可能連命令行腳本都沒有寫過,更別提交互式的命令操作了。而今天,我們帶來的這個(gè)擴(kuò)展就是針對(duì) PHP 的交互式命令行操作的2021-05-05
PHP里面把16進(jìn)制的圖片數(shù)據(jù)顯示在html的img標(biāo)簽上(實(shí)現(xiàn)方法)
下面小編就為大家?guī)硪黄狿HP里面把16進(jìn)制的圖片數(shù)據(jù)顯示在html的img標(biāo)簽上(實(shí)現(xiàn)方法)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
php中實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法
本文主要介紹了實(shí)現(xiàn)php字符串翻轉(zhuǎn)的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02
詳解PHP實(shí)現(xiàn)定時(shí)任務(wù)的五種方法
這幾天需要用PHP寫一個(gè)定時(shí)抓取網(wǎng)頁的服務(wù)器應(yīng)用。 在網(wǎng)上搜了一下解決辦法, 找到幾種解決辦法,現(xiàn)總結(jié)如下。2016-07-07

