成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:701日期: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
    相關文章:
    成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
    日韩精品一区二区三区中文精品| 亚洲人精品一区| 中文字幕精品在线不卡| 国产伦精品一区二区三区在线观看 | 亚洲一区二区在线播放相泽| 欧美日一区二区在线观看 | 天堂va蜜桃一区二区三区漫画版| 国产亚洲毛片在线| 亚洲一区二区黄色| 午夜亚洲一区| 亚洲第一激情av| 久久高清国产| 奇米精品一区二区三区四区| 欧美亚洲国产一区二区三区| 久久成人18免费观看| 欧美日韩一区二区三区在线看| 三级在线观看一区二区| 色婷婷综合久久久久中文一区二区| 亚洲成av人片一区二区三区 | 一本一本久久a久久精品综合妖精| 中文字幕一区在线观看视频| 欧美区亚洲区| 亚洲婷婷国产精品电影人久久| 狠狠色噜噜狠狠狠狠色吗综合 | 欧美日韩国产一区二区三区地区| 日韩欧美亚洲另类制服综合在线| 亚洲最新在线观看| 伊人精品成人久久综合软件| 国产日韩欧美高清在线| 女人天堂亚洲aⅴ在线观看| 国产亚洲欧美在线| 国精品一区二区三区| 亚洲色图制服诱惑 | 午夜精品久久久久99热蜜桃导演 | 看电影不卡的网站| 欧美一区二区在线播放| 成人精品高清在线| 久久久激情视频| 很黄很黄激情成人| 亚洲综合成人网| 久久亚洲视频| 精品一二三四在线| 精品国产成人系列| 欧美日韩精品久久| 亚洲精品欧美专区| 在线视频欧美精品| 国产精品一区免费在线观看| 久久人人爽人人爽| 好吊日精品视频| 亚洲成a人片综合在线| 欧美午夜精品免费| 懂色av一区二区三区蜜臀| 精品国产乱码久久久久久夜甘婷婷 | 久久综合视频网| 欧美涩涩视频| 亚洲综合色区另类av| 日本大香伊一区二区三区| 国产麻豆日韩欧美久久| 国产日韩成人精品| 国产精品一二| 精品一区二区在线免费观看| 欧美va亚洲va| 亚洲三级免费| 全部av―极品视觉盛宴亚洲| 欧美一区二区福利视频| 欧美在线看片| 亚洲国产毛片aaaaa无费看| 欧美亚洲精品一区| www.视频一区| 一区二区三区精密机械公司| 欧美日韩在线播放一区| 99久久综合色| 亚洲精品国产a| 欧美久久久久久久久久| 欧美精品成人| 奇米综合一区二区三区精品视频| 日韩精品一区在线观看| 亚洲三级影院| 国产综合色在线视频区| 日本一区二区视频在线观看| 老司机精品视频网站| aaa亚洲精品| 亚洲动漫第一页| 欧美成人aa大片| 99精品视频免费观看视频| 久久精品99久久久| 国产性天天综合网| 久热这里只精品99re8久| av影院午夜一区| 亚洲在线一区二区三区| 欧美一区二区在线免费播放| 极品中文字幕一区| 国产乱码精品一区二区三区忘忧草 | www.av亚洲| 日韩在线一区二区三区| 久久久久久99精品| 久久综合九色综合欧美狠狠| 99re视频这里只有精品| 日韩高清不卡在线| 久久久久久99久久久精品网站| 久久福利电影| 你懂的国产精品| 美女视频一区二区| 亚洲欧洲成人自拍| 日韩欧美色电影| 快she精品国产999| 欧美一区高清| 韩国av一区二区三区四区| 伊人色综合久久天天人手人婷| 日韩片之四级片| 久久久777| 欧美日韩一区二区三区免费| 久久99精品视频| 亚洲激情中文1区| 精品精品国产高清a毛片牛牛| 一本大道久久a久久综合| 黄色欧美成人| 国产福利一区二区三区视频 | 99国产精品视频免费观看一公开| 成人网在线播放| 麻豆国产欧美日韩综合精品二区 | 91官网在线免费观看| 亚洲激情欧美| 色综合色综合色综合色综合色综合 | 国产三级一区二区| 在线不卡一区二区| 麻豆精品网站| 欧美日韩亚洲三区| 国产91精品一区二区麻豆亚洲| 亚洲国产三级在线| 国产精品久久久一本精品| 日韩女优电影在线观看| 欧美视频中文字幕| 国产一区二区三区的电影 | 亚洲一区二区三区精品在线观看| 91看片淫黄大片一级在线观看| 久久www免费人成看片高清| 亚洲视频一二三区| 久久久激情视频| 日韩欧美aaaaaa| 欧美精品v日韩精品v韩国精品v| 小嫩嫩精品导航| 亚洲一级黄色| 欧美国产三区| av电影在线观看完整版一区二区| 韩国成人精品a∨在线观看| 青娱乐精品视频| 亚洲图片欧美一区| 亚洲精选视频在线| 国产精品丝袜久久久久久app| 久久综合色婷婷| 日韩欧美123| 欧美日韩和欧美的一区二区| 久久久人人人| 西西人体一区二区| 中国成人在线视频| 18成人免费观看视频| 91免费观看视频| 成人高清在线视频| 国产美女主播视频一区| 老汉av免费一区二区三区| 三级精品在线观看| 日韩va亚洲va欧美va久久| 日韩综合一区二区| 亚洲国产成人va在线观看天堂| 亚洲精品视频在线看| √…a在线天堂一区| 国产精品天美传媒| 国产精品伦一区二区三级视频| 久久亚洲精华国产精华液| 精品国产伦理网| 欧美成人高清电影在线| 欧美大片顶级少妇| 日韩欧美不卡一区| 精品久久国产字幕高潮| 精品国产免费人成在线观看| 精品久久久久久久久久久久久久久久久 | 在线电影国产精品| 7777精品伊人久久久大香线蕉的| 欧美伦理影视网| 欧美一区二区三区色| 日韩亚洲欧美成人一区| 日韩免费看的电影| 久久综合色婷婷| 中文一区二区完整视频在线观看| 国产精品久久久久久久久果冻传媒 | 91毛片在线观看| 欧美sm重口味系列视频在线观看| 欧美午夜精彩| 亚洲国产精选| 国产伦精品一区二区三区视频孕妇 | 欧美三级日韩三级国产三级| 欧美日韩亚洲国产综合| 欧美一区二区三区视频在线| 精品国产伦一区二区三区观看体验| www久久久久| 国产精品人妖ts系列视频| 亚洲男女一区二区三区| 亚洲电影在线播放| 久久成人久久鬼色|