日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP設計模式中工廠模式深入詳解

瀏覽:800日期:2022-06-06 08:08:15
目錄
  • 簡介
  • 簡單工廠
    • 作用
    • 適用場景
    • 優點
    • 缺點
    • 代碼
  • 工廠模式
    • 作用
    • 適用場景
    • 優點
    • 缺點
    • 代碼
  • 抽象工廠
    • 作用
    • 適用場景
    • 優點
    • 缺點
    • 代碼
  • 三者對比

    簡介

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

    通俗講就是用于如何優雅的創建對象而設計。當開發者不知道建什么對象,或者創建方式過于復雜的時候去使用(比如引入一個大composer項目或大型sdk,有些時候確實不知道需要使用那些對象,此時就需要參考官方文檔,通過包里或sdk里提供的工廠方法,傳入指定參數去生成指定對象。比如easyWechat項目。),適用于具有服務端和調用端的場景,既能優化調用端的使用體感,也能隱藏服務端創建對象的細節。

    簡單工廠

    作用

    幫忙創建對象(核心方法可以使用靜態方法,稱之為靜態工廠)。

    適用場景

    • 當不知道創建什么對象的時候去使用
    • 創建對象過于復雜的時候去使用。

    優點

    簡單工廠是工廠模式中創建對象最簡單的方式,通俗容易理解。

    缺點

    當要生產對象的模塊發生了需求變更,此時要被實例化的類可能會增加或者減少,此時就需要改工廠模式的核心代碼,違背了開閉原則。

    代碼

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

    工廠模式

    作用

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

    適用場景

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

    優點

    • 將創建對象的過程推遲的子類去實現,職責清晰,比較符合開閉原則。
    • 并解決了簡單工廠模式下,一旦類發生變化,就需要修改核心模塊的作。

    缺點

    額外增加設計復雜度,每增加一個類,就需要增加一個子工廠。增加了系統抽象性。

    代碼

    interface Usb {
        public function run();
    }
    class Keyboard implements USb {
        public function run() {
    return "我能打字";
        }
    }
    class Mouse implements USb {
        public function run() {
    return "我能控制光標";
        }
    }
    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();
        }
    }
    //----------調用端----------
    $res = MouseFactory::build()->run();

    抽象工廠

    作用

    • 抽象工廠相比于工廠模式,可以創建一堆互有關聯對象。
    • 抽象工廠的實現由4部分構成:抽象工廠,具體工廠,抽象產品,具體產品。

    適用場景

    對象創建過程復雜,并且類與類之間有關聯的時候。

    優點

    抽象工廠可以用一個類的不同方法返回不同對象,(工廠模式一個子類生產一個對象,抽象工廠可以生產出多個對象),替代系統中存在大量的工廠類。

    缺點

    會產生較大的變動,需要添加指定的方法去維護抽象工廠的完整性。

    代碼

    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 "我會說中文";
        }
    }
    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 "我會寫漢字";
        }
    }
    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();
        }
    }
    //----------調用端----------
    //中國人對應會說漢語,或寫漢字,這就是有關聯,
    $chinese_say= ChineseFactory::buildSay()->say();
    $chinese_write_word = ChineseFactory::buildWriteWord()->writeWord();
    

    三者對比

     簡單工廠工廠模式抽象工廠實現難度相對簡單相對復雜相對復雜實現細節通過方法生產對象(不需要子類)通過子類方法去生產對象通過子類方法去生產有關聯的對象優點實現簡單解決了簡單工廠違背開閉原則的問題可以制造一堆有關聯的對象,減少工廠模式下工廠子類的數量缺點違背開閉原則,不適用修改產品更加抽象,類數量增加,不方便維護更加抽象,類數量增加,不方便維護適用場景簡單場景,類之間無關聯且不經常變動需要實例化的產品容易有變動類之間有關聯,且不經常變動

    到此這篇關于PHP設計模式中工廠模式深入詳解的文章就介紹到這了,更多相關PHP工廠模式內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

    標簽: PHP
    相關文章:
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    玖玖精品视频| 亚洲视频播放| 在线看片不卡| 国产精品视频一区二区三区四蜜臂| 97欧美在线视频| 丝袜美腿高跟呻吟高潮一区| 久久伊人亚洲| 日韩一区二区免费看| 国产精品xxx| 乱人伦精品视频在线观看| 精品国产黄a∨片高清在线| 国产伊人精品| 麻豆免费精品视频| 国产美女一区| 国产中文在线播放| 日本免费一区二区视频| 在线日韩av| 久久一区国产| 亚洲毛片在线免费| 亚洲一级黄色| 久久一区精品| 亚洲不卡视频| 亚洲五月婷婷| 日韩av在线播放网址| 日韩在线欧美| 不卡专区在线| 久久国产小视频| 黑丝一区二区| 日韩一区二区三区精品视频第3页| 精品国产午夜肉伦伦影院| 在线午夜精品| 国产一区二区精品福利地址| 久久av在线| 久久久久久自在自线| 日韩中文字幕无砖| 99成人在线视频| 国产精品久久久久久久久久久久久久久 | 色爱av综合网| 精品成av人一区二区三区| 中文字幕亚洲影视| 亚洲黄色在线| 成人羞羞在线观看网站| 久久99青青| 国产日本亚洲| 日韩精品久久理论片| 亚洲欧美日韩国产| 国产字幕视频一区二区| 亚洲黄色免费看| 国产一区2区在线观看| 国产精品一区二区av交换| 日本成人在线视频网站| 九九综合在线| 婷婷成人综合| 91精品国产成人观看| 国产成人77亚洲精品www| 美女国产一区二区三区| 青青国产91久久久久久| 日韩影片在线观看| 在线精品观看| 综合国产在线| 亚洲天堂av资源在线观看| 欧美日韩国产一区二区三区不卡| 欧美精选视频一区二区| 99精品小视频| 狠狠久久婷婷| 久热精品在线| 日韩中文字幕不卡| 亚洲一区二区免费在线观看| 蜜臀久久99精品久久久画质超高清 | 国语对白精品一区二区| 国产激情久久| 欧美黄色一区| 欧美国产先锋| 久久精品二区亚洲w码| 国产精品亚洲成在人线| 国产色噜噜噜91在线精品| 国产午夜一区| 国产精品白丝一区二区三区| 欧美国产精品| 欧美韩日一区| 91精品一区二区三区综合在线爱| 日韩精品麻豆| 亚洲激情中文| 男女激情视频一区| 日本少妇一区二区| 国产精品xxx在线观看| 国内在线观看一区二区三区| 欧美xxxx中国| 欧美影院三区| 黑丝一区二区| 中文字幕亚洲影视| 国产伦理一区| 鲁鲁在线中文| 香蕉精品视频在线观看| 美女日韩在线中文字幕| 日本不卡中文字幕| 欧美激情日韩| 日产精品一区| 香蕉久久夜色精品国产| 日本电影久久久| 免费在线观看一区| 精品捆绑调教一区二区三区| 亚洲欧美不卡| 国产精品多人| 成人亚洲欧美| 午夜宅男久久久| 久久国产婷婷国产香蕉| 亚洲国产福利| 国产精品毛片一区二区三区| 日韩高清成人在线| 日产精品一区二区| 欧美日韩国产在线观看网站 | 国产精品嫩草99av在线| 欧美一区激情| 国产麻豆久久| 久久福利毛片| 欧美激情99| 激情综合网五月| 91亚洲精品视频在线观看| 中文字幕在线视频久| 六月天综合网| 久久av偷拍| 午夜久久黄色| 国产欧美激情| 亚洲欧美日韩高清在线| 欧美日韩xxxx| 成人va天堂| 日韩欧美另类中文字幕| 国内精品伊人| 欧美综合国产| 国语对白精品一区二区| 夜夜嗨av一区二区三区网站四季av| 清纯唯美亚洲综合一区| 精品日韩视频| 91av一区| 久久亚洲国产| 国产精品v日韩精品v欧美精品网站| 久久久久久久久丰满| 欧美日韩中出| 亚洲精品一二三区区别| 麻豆91在线播放| 久久午夜精品一区二区| 色爱综合网欧美| 日韩精品中文字幕一区二区| 高清av不卡| 日韩精品导航| 尤物tv在线精品| 久久不见久久见免费视频7| 国产精品日韩久久久| 精品精品国产三级a∨在线| 另类激情亚洲| av亚洲一区二区三区| 国产日产一区| 亚洲一级在线| 成人羞羞视频在线看网址| 国产美女久久| 亚洲欧美网站| 免费污视频在线一区| 久久福利在线| 日韩中文字幕一区二区高清99| 成人午夜精品| 国产精品一区二区av交换 | 久久久久久美女精品| 国产精品久久久网站| 亚洲丝袜啪啪| 自由日本语亚洲人高潮| 精品一区二区三区中文字幕视频 | 亚洲成人国产| 欧美极品中文字幕| 美女精品一区| 亚洲高清成人| 国产粉嫩在线观看| 国产精久久久| 7777精品| 中文字幕中文字幕精品| 不卡一区2区| 日韩欧美不卡| 精品免费av| 欧美黄色一区| 国产日韩一区二区三区在线播放| 免费人成黄页网站在线一区二区| 亚洲国内精品| 成人精品中文字幕| 成人一区不卡| 麻豆传媒一区二区三区| 国产欧美一区| 日韩av午夜在线观看| 日韩专区一卡二卡| 在线综合欧美| 亚洲二区三区不卡| 久久一级电影| 日韩欧美一区二区三区免费观看| 欧美国产另类| 国产精品第十页| 久久国产婷婷国产香蕉| 婷婷综合福利| 日本在线观看不卡视频| 亚洲精品美女91| 日本不卡高清| 日韩一区网站|