亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP抽象工廠模式Abstract Factory Pattern優(yōu)點(diǎn)與實(shí)現(xiàn)方式

 更新時(shí)間:2023年03月27日 09:40:51   作者:php_gl12345678  
這篇文章主要介紹了PHP抽象工廠模式Abstract Factory Pattern優(yōu)點(diǎn)與實(shí)現(xiàn)方式,抽象工廠模式是一種創(chuàng)建型模式,它提供了一種創(chuàng)建一系列相關(guān)或相互依賴(lài)對(duì)象的最佳方式

抽象工廠模式Abstract Factory Pattern是什么

抽象工廠模式是一種創(chuàng)建型模式,它提供了一種創(chuàng)建一系列相關(guān)或相互依賴(lài)對(duì)象的最佳方式。在抽象工廠模式中,我們定義一個(gè)抽象工廠接口,由具體的工廠類(lèi)來(lái)實(shí)現(xiàn)該接口,創(chuàng)建一系列相關(guān)的對(duì)象。

抽象工廠模式的優(yōu)點(diǎn)

  • 抽象工廠模式可以幫助我們實(shí)現(xiàn)松耦合,客戶端代碼無(wú)需知道實(shí)際創(chuàng)建的對(duì)象,只需知道抽象工廠即可;
  • 抽象工廠模式可以幫助我們封裝變化,客戶端代碼無(wú)需關(guān)心具體對(duì)象的創(chuàng)建過(guò)程,只需關(guān)心抽象工廠即可;
  • 抽象工廠模式可以幫助我們實(shí)現(xiàn)單一職責(zé)原則,一個(gè)類(lèi)只負(fù)責(zé)一個(gè)職責(zé),由工廠類(lèi)負(fù)責(zé)創(chuàng)建對(duì)象。

抽象工廠模式的實(shí)現(xiàn)

在 PHP 中,我們可以使用以下方式來(lái)實(shí)現(xiàn)抽象工廠模式:

1. 定義抽象產(chǎn)品類(lèi)

<?php
// 定義抽象產(chǎn)品類(lèi)(汽車(chē))
abstract class Car
{
    protected $brand;
    protected $type;
    public function __construct($brand, $type)
    {
        $this->brand = $brand;
        $this->type = $type;
    }
    abstract public function run();
}
// 定義抽象產(chǎn)品類(lèi)(手機(jī))
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)品類(lèi)

<?php
// 定義具體產(chǎn)品類(lèi)(奔馳汽車(chē))
class BenzCar extends Car
{
    public function run()
    {
        echo "{$this->brand} {$this->type} is running..." . PHP_EOL;
    }
}
// 定義具體產(chǎn)品類(lèi)(寶馬汽車(chē))
class BmwCar extends Car
{
    public function run()
    {
        echo "{$this->brand} {$this->type} is running..." . PHP_EOL;
    }
}
// 定義具體產(chǎn)品類(lèi)(蘋(píng)果手機(jī))
class ApplePhone extends Phone
{
    public function call()
    {
        echo "{$this->brand} {$this->model} is calling..." . PHP_EOL;
    }
}
// 定義具體產(chǎn)品類(lèi)(華為手機(jī))
class HuaweiPhone extends Phone
{
    public function call()
    {
        echo "{$this->brand} {$this->model} is calling..." . PHP_EOL;
    }
}

3. 定義抽象工廠類(lèi)

<?php
// 定義抽象工廠類(lèi)
abstract class AbstractFactory
{
    abstract public function createCar($type);
    abstract public function createPhone($model);
}

4. 定義具體工廠類(lèi)

<?php
// 定義具體工廠類(lèi)(德國(guó)工廠)
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.');
        }
    }
}
// 定義具體工廠類(lèi)(中國(guó)工廠)
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('蘋(píng)果', 'iPhone 11');
            case 'Huawei':
                return new HuaweiPhone('華為', 'Mate 30');
            default:
                throw new Exception('Undefined phone model.');
        }
    }
}

5. 使用

<?php
// 使用德國(guó)工廠
$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...
// 使用中國(guó)工廠
$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é)

抽象工廠模式是一種非常常見(jiàn)的創(chuàng)建型模式,它可以幫助我們封裝變化,實(shí)現(xiàn)松耦合,同時(shí)遵循單一職責(zé)原則。在實(shí)際開(kāi)發(fā)中,我們可以根據(jù)具體的需求,選擇不同的抽象工廠模式來(lái)實(shí)現(xiàn)一系列相關(guān)對(duì)象的創(chuàng)建。

到此這篇關(guān)于PHP抽象工廠模式Abstract Factory Pattern優(yōu)點(diǎn)與實(shí)現(xiàn)方式的文章就介紹到這了,更多相關(guān)PHP抽象工廠模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PHP寫(xiě)API輸出的時(shí)用echo的原因詳解

    PHP寫(xiě)API輸出的時(shí)用echo的原因詳解

    在本篇文章里小編給大家分享了關(guān)于PHP寫(xiě)API輸出的時(shí)用echo的原因和相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。
    2019-04-04
  • 用PHP程序?qū)崿F(xiàn)支持頁(yè)面后退的兩種方法

    用PHP程序?qū)崿F(xiàn)支持頁(yè)面后退的兩種方法

    在開(kāi)發(fā)過(guò)程中,往往因?yàn)楸韱纬鲥e(cuò)而返回頁(yè)面的時(shí)候填寫(xiě)的信息都不見(jiàn)了,為了支持頁(yè)面回跳,可以通過(guò)兩種方法實(shí)現(xiàn)。
    2008-06-06
  • PHPThumb PHP 圖片縮略圖庫(kù)

    PHPThumb PHP 圖片縮略圖庫(kù)

    剛上網(wǎng)搜索了一下,跟這個(gè)同名的還有另一個(gè),似乎也挺不錯(cuò)的,這個(gè)類(lèi)庫(kù)是github.com上的一個(gè)開(kāi)源項(xiàng)目:PHPThumb
    2012-03-03
  • PHP Session條件競(jìng)爭(zhēng)超詳細(xì)講解

    PHP Session條件競(jìng)爭(zhēng)超詳細(xì)講解

    這篇文章主要介紹了PHP Session條件競(jìng)爭(zhēng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-12-12
  • php使用curl簡(jiǎn)單抓取遠(yuǎn)程url的方法

    php使用curl簡(jiǎn)單抓取遠(yuǎn)程url的方法

    這篇文章主要介紹了php使用curl簡(jiǎn)單抓取遠(yuǎn)程url的方法,涉及php操作curl的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • php寫(xiě)入txt亂碼的解決方法

    php寫(xiě)入txt亂碼的解決方法

    在本篇文章里小編給大家分享的是關(guān)于php寫(xiě)入txt亂碼的知識(shí)點(diǎn)以及解決方法,有需要的朋友們參考下。
    2019-09-09
  • php中curl和file_get_content的區(qū)別

    php中curl和file_get_content的區(qū)別

    抓取遠(yuǎn)程內(nèi)容,之前一直都在用file_get_content函數(shù),其實(shí)早就知道有curl這么一個(gè)好東西的存在,但是看了一眼后感覺(jué)使用頗有些復(fù)雜,沒(méi)有file_get_content那么簡(jiǎn)單,再就是需求也不大,所以沒(méi)有學(xué)習(xí)使用curl
    2014-05-05
  • php實(shí)現(xiàn)的表單驗(yàn)證類(lèi)完整示例

    php實(shí)現(xiàn)的表單驗(yàn)證類(lèi)完整示例

    這篇文章主要介紹了php實(shí)現(xiàn)的表單驗(yàn)證類(lèi),結(jié)合完整實(shí)例形式分析了php封裝的表單相關(guān)的正則驗(yàn)證、字符串轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • PHP Socket網(wǎng)絡(luò)操作類(lèi)定義與用法示例

    PHP Socket網(wǎng)絡(luò)操作類(lèi)定義與用法示例

    這篇文章主要介紹了PHP Socket網(wǎng)絡(luò)操作類(lèi)定義與用法,結(jié)合實(shí)例形式分析了php socket網(wǎng)絡(luò)操作類(lèi)的定義及結(jié)合ajax發(fā)送查詢請(qǐng)求等相關(guān)使用技巧,需要的朋友可以參考下
    2017-08-08
  • PHP封裝的字符串加密解密函數(shù)

    PHP封裝的字符串加密解密函數(shù)

    這篇文章主要給大家匯總介紹了PHP封裝的字符串加密解密函數(shù)以及使用方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2015-12-12

最新評(píng)論