亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

PHP設(shè)計(jì)模式中工廠模式深入詳解

瀏覽:414日期:2022-06-06 08:08:15
目錄
  • 簡介
  • 簡單工廠
    • 作用
    • 適用場(chǎng)景
    • 優(yōu)點(diǎn)
    • 缺點(diǎn)
    • 代碼
  • 工廠模式
    • 作用
    • 適用場(chǎng)景
    • 優(yōu)點(diǎn)
    • 缺點(diǎn)
    • 代碼
  • 抽象工廠
    • 作用
    • 適用場(chǎng)景
    • 優(yōu)點(diǎn)
    • 缺點(diǎn)
    • 代碼
  • 三者對(duì)比

    簡介

    工廠模式屬于創(chuàng)建型模式,可以分為三種:簡單工廠、工廠模式、抽象工廠。

    通俗講就是用于如何優(yōu)雅的創(chuàng)建對(duì)象而設(shè)計(jì)。當(dāng)開發(fā)者不知道建什么對(duì)象,或者創(chuàng)建方式過于復(fù)雜的時(shí)候去使用(比如引入一個(gè)大composer項(xiàng)目或大型sdk,有些時(shí)候確實(shí)不知道需要使用那些對(duì)象,此時(shí)就需要參考官方文檔,通過包里或sdk里提供的工廠方法,傳入指定參數(shù)去生成指定對(duì)象。比如easyWechat項(xiàng)目。),適用于具有服務(wù)端和調(diào)用端的場(chǎng)景,既能優(yōu)化調(diào)用端的使用體感,也能隱藏服務(wù)端創(chuàng)建對(duì)象的細(xì)節(jié)。

    簡單工廠

    作用

    幫忙創(chuàng)建對(duì)象(核心方法可以使用靜態(tài)方法,稱之為靜態(tài)工廠)。

    適用場(chǎng)景

    • 當(dāng)不知道創(chuàng)建什么對(duì)象的時(shí)候去使用
    • 創(chuàng)建對(duì)象過于復(fù)雜的時(shí)候去使用。

    優(yōu)點(diǎn)

    簡單工廠是工廠模式中創(chuàng)建對(duì)象最簡單的方式,通俗容易理解。

    缺點(diǎn)

    當(dāng)要生產(chǎn)對(duì)象的模塊發(fā)生了需求變更,此時(shí)要被實(shí)例化的類可能會(huì)增加或者減少,此時(shí)就需要改工廠模式的核心代碼,違背了開閉原則。

    代碼

    class Keyboard{
        public function run() {
    return "我能打字";
        }
    }
    class Mouse {
        public function run() {
    return "我能控制光標(biāo)";
        }
    }
    class Factory {
        public static function build($key) {
    if($key == "mouse") {
        return new Mouse();
    } else if ($key == "keyboard") {
        return new Keyboard();
    }
        }
    }
    //----------調(diào)用端----------
    $res = Factory::build("mouse")->run();
    /*
    筆者認(rèn)為,簡單工廠可以簡化為以下寫法
    但是這會(huì)有三個(gè)缺陷:
    1. 能否做到類名寫法一致?不一定能做到
    2. 缺少白名單機(jī)制,不安全,指不定new那個(gè)類,特別是這個(gè)參數(shù)守用戶傳參影響的場(chǎng)景,不過這個(gè)可以讓需要實(shí)例化的類實(shí)現(xiàn)一個(gè)接口,工廠方法添加typehint (類型約束)限制。
    3. 如果修改白名單,又違背了開閉原則。
    */
    class Factory {
        public static function build($class) {
    return ucfirst($class);
        }
    }

    工廠模式

    作用

    解決了簡單工廠模式中違背開閉原則的問題。

    適用場(chǎng)景

    • 并解決了簡單工廠模式下,一旦類發(fā)生變化,就需要修改核心模塊的作用,遵循開閉原則。
    • 產(chǎn)品層變化較大的的場(chǎng)景

    優(yōu)點(diǎn)

    • 將創(chuàng)建對(duì)象的過程推遲的子類去實(shí)現(xiàn),職責(zé)清晰,比較符合開閉原則。
    • 并解決了簡單工廠模式下,一旦類發(fā)生變化,就需要修改核心模塊的作。

    缺點(diǎn)

    額外增加設(shè)計(jì)復(fù)雜度,每增加一個(gè)類,就需要增加一個(gè)子工廠。增加了系統(tǒng)抽象性。

    代碼

    interface Usb {
        public function run();
    }
    class Keyboard implements USb {
        public function run() {
    return "我能打字";
        }
    }
    class Mouse implements USb {
        public function run() {
    return "我能控制光標(biāo)";
        }
    }
    interFace Factory {
        public static function build();
    }
    class KeyboardFactory implements Factory {
        public static function build() :Keyboard {
    return new Keyboard();
        }
    }
    class MouseFactory implements Factory {
        public static function build() :Mouse {
    return new Mouse();
        }
    }
    //----------調(diào)用端----------
    $res = MouseFactory::build()->run();

    抽象工廠

    作用

    • 抽象工廠相比于工廠模式,可以創(chuàng)建一堆互有關(guān)聯(lián)對(duì)象。
    • 抽象工廠的實(shí)現(xiàn)由4部分構(gòu)成:抽象工廠,具體工廠,抽象產(chǎn)品,具體產(chǎn)品。

    適用場(chǎng)景

    對(duì)象創(chuàng)建過程復(fù)雜,并且類與類之間有關(guān)聯(lián)的時(shí)候。

    優(yōu)點(diǎn)

    抽象工廠可以用一個(gè)類的不同方法返回不同對(duì)象,(工廠模式一個(gè)子類生產(chǎn)一個(gè)對(duì)象,抽象工廠可以生產(chǎn)出多個(gè)對(duì)象),替代系統(tǒng)中存在大量的工廠類。

    缺點(diǎn)

    會(huì)產(chǎn)生較大的變動(dòng),需要添加指定的方法去維護(hù)抽象工廠的完整性。

    代碼

    interface Talk {
        public function say();
    }
    class EnglishTalk implements Talk {
        public function say() {
    return "I can speak English";
        }
    }
    class ChineseTalk implements Talk {
        public function say() {
    return "我會(huì)說中文";
        }
    }
    interface Write {
        public function writeWord();
    }
    class EnglishWrite implements Write {
        public function writeWord() {
    return "I can write English words";
        }
    }
    class ChineseWrite implements Write {
        public function writeWord() {
    return "我會(huì)寫漢字";
        }
    }
    interface Factory {
        public static function buildSay();
        public static function buildWriteWord();
    }
    class EnglishFactory implements Factory {
        public static function buildSay() :EnglishTalk {
    return new EnglishTalk();
        }
        public static function buildWriteWord() :EnglishWrite {
    return new EnglishWrite();
        }
    }
    class ChineseFactory implements Factory {
        public static function buildSay() :ChineseTalk {
    return new ChineseTalk();
        }
        public static function buildWriteWord():ChineseWrite {
    return new ChineseWrite();
        }
    }
    //----------調(diào)用端----------
    //中國人對(duì)應(yīng)會(huì)說漢語,或?qū)憹h字,這就是有關(guān)聯(lián),
    $chinese_say= ChineseFactory::buildSay()->say();
    $chinese_write_word = ChineseFactory::buildWriteWord()->writeWord();
    

    三者對(duì)比

     簡單工廠工廠模式抽象工廠實(shí)現(xiàn)難度相對(duì)簡單相對(duì)復(fù)雜相對(duì)復(fù)雜實(shí)現(xiàn)細(xì)節(jié)通過方法生產(chǎn)對(duì)象(不需要子類)通過子類方法去生產(chǎn)對(duì)象通過子類方法去生產(chǎn)有關(guān)聯(lián)的對(duì)象優(yōu)點(diǎn)實(shí)現(xiàn)簡單解決了簡單工廠違背開閉原則的問題可以制造一堆有關(guān)聯(lián)的對(duì)象,減少工廠模式下工廠子類的數(shù)量缺點(diǎn)違背開閉原則,不適用修改產(chǎn)品更加抽象,類數(shù)量增加,不方便維護(hù)更加抽象,類數(shù)量增加,不方便維護(hù)適用場(chǎng)景簡單場(chǎng)景,類之間無關(guān)聯(lián)且不經(jīng)常變動(dòng)需要實(shí)例化的產(chǎn)品容易有變動(dòng)類之間有關(guān)聯(lián),且不經(jīng)常變動(dòng)

    到此這篇關(guān)于PHP設(shè)計(jì)模式中工廠模式深入詳解的文章就介紹到這了,更多相關(guān)PHP工廠模式內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

    標(biāo)簽: PHP
    相關(guān)文章:
    主站蜘蛛池模板: 成人精品一区久久久久 | 国产成 人 综合 亚洲绿色 | 亚洲欧美另类一区 | 亚洲人成在线观看一区二区 | 精品欧美一区二区在线观看欧美熟 | 国产高清视频免费 | 正在播放国产精品白丝在线 | 亚洲人成在线观看一区二区 | 久久是免费只精品热在线 | 亚洲精品视频在线免费 | 久久精品中文字幕不卡一二区 | 久久久久欧美精品观看 | 欧美成人一区二区三区不卡视频 | 国产精品福利无圣光一区二区 | 黄 在线播放 | 美女隐私视频黄www免费 | 小明视频免费永久在线网 | 国产又爽又色在线观看 | 亚洲综合第一页 | 欧美日韩亚洲第一页 | 国产日比视频 | 永久免费看的啪啪网站 | 亚洲美女毛片 | 男人狂躁女人下面视频免费看 | 黄色亚洲毛片 | 97久久久久国产精品嫩草影院 | 亚洲国产九九精品一区二区 | 在线观看国产一区 | 欧美日韩一区二区三区自拍 | 亚洲欧美日韩国产综合高清 | 久久er这里只有精品 | 99久久免费精品国产免费 | 国产成人夜间影院在线观看 | 黄色片短视频 | 黄性色 | 国产一区二区视频在线观看 | 欧美亚洲专区 | 操亚洲女人 | 色婷婷影院在线视频免费播放 | 一级女性大黄生活片免费 | 欧美午夜a级精美理论片 |