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

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

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

瀏覽:804日期: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久久,三上悠亚国产精品一区二区三区
    亚洲人成毛片在线播放女女| 久久国产成人午夜av影院宅| 91综合网人人| 日本欧美一区二区| 日本 国产 欧美色综合| 国产精品4hu.www| 激情欧美亚洲| 日韩精品诱惑一区?区三区| 精品不卡一区| 国产成人免费视频网站视频社区| 国产福利一区二区精品秒拍| 国产精品一区三区在线观看| 国产欧美一区二区三区米奇| 国产麻豆一区二区三区精品视频| 国产精品一区亚洲| 麻豆国产精品| 精品丝袜久久| 97欧美在线视频| 久久高清免费| 久久最新视频| 久久成人国产| 日韩精品视频网站| 国产精品sm| 超级白嫩亚洲国产第一| 国产在线欧美| 亚洲人成网77777色在线播放| 国产欧美日韩一区二区三区在线| 国产一区二区三区久久| 日韩一区亚洲二区| 不卡在线一区| 日韩福利视频导航| 精品三级在线| 日本亚州欧洲精品不卡| 日韩精品永久网址| 国产探花一区二区| 日韩欧美2区| 欧美亚洲免费| 在线日韩一区| 97成人超碰| 亚洲精品国产嫩草在线观看| 久久国产精品99国产| 国产精品av一区二区| 91精品成人| 欧美日韩国产高清电影| 精品91久久久久| 99在线精品免费视频九九视| 在线一区二区三区视频| 亚洲精品乱码日韩| 日本a级不卡| 精品久久97| 久久精品色播| 精品亚洲美女网站| 国产精品老牛| 日韩精品欧美成人高清一区二区| 国产午夜久久av| 国产成人免费| 久久精品亚洲| 国产调教一区二区三区| av最新在线| 亚洲精品99| 欧美一级二区| 9999国产精品| 伊人成人在线视频| 亚洲精品激情| 久久精品国产99国产| 国产精品一区二区av日韩在线| 亚洲欧美激情诱惑| 日韩欧美视频专区| 偷拍亚洲精品| 丝袜国产日韩另类美女| 亚洲黄色免费看| 亚洲啊v在线| 国内一区二区三区| 国产精品嫩模av在线| 国产精品99一区二区三| 色乱码一区二区三区网站| 欧美www视频在线观看| 激情婷婷亚洲| 久久香蕉精品| 精品视频国内| 久久精品国产68国产精品亚洲| 一区二区三区国产在线| 精品亚洲成人| 国产精品嫩草99av在线| 久久精品72免费观看| 不卡福利视频| 日韩va亚洲va欧美va久久| 日韩深夜视频| 日本中文字幕视频一区| 日韩在线观看不卡| 国产日韩欧美一区二区三区| 欧美日韩国产在线一区| 麻豆精品视频在线| 日韩制服丝袜av| 高潮久久久久久久久久久久久久| 亚洲激情久久| 成人在线免费观看91| 丝袜美腿成人在线| 欧美激情99| 亚洲精品进入| 欧美日韩在线网站| 国产高清精品二区| 免费观看久久久4p| 鲁大师精品99久久久| 日韩影院精彩在线| 亚洲精品.com| 久久久精品区| 日本不卡视频在线观看| 亚洲天堂1区| 欧美日韩精品一区二区三区在线观看| 日韩av一级| 精品国产欧美| 日韩精品视频网站| 亚洲三级网址| 日韩视频二区| 三级小说欧洲区亚洲区| 免费看一区二区三区| 日本在线成人| 视频一区在线视频| 亚洲一本视频| 91tv亚洲精品香蕉国产一区| 精品视频在线观看网站| 国产欧美日韩视频在线| 免费看日韩精品| 91高清一区| 欧美黄色网页| 国产精品99久久免费观看| 日韩中文字幕| 亚洲精品一区二区在线看| 久久精品国产久精国产爱| 国产精品永久| 91久久精品无嫩草影院| 视频在线观看91| 亚洲欧美日韩视频二区| 亚洲激情社区| 黄色日韩精品| 91成人精品| 香蕉国产精品| 亚洲激情中文| 在线国产一区二区| 欧美日韩精品免费观看视欧美高清免费大片 | 亚洲一区导航| 免费久久久久久久久| 天堂√8在线中文| 精品国产美女a久久9999| 国产一精品一av一免费爽爽| 亚洲精品高潮| 亚洲精品免费观看| 亚洲有吗中文字幕| 日韩午夜av| 婷婷综合国产| 视频一区二区三区入口| 波多野结衣一区| 在线视频观看日韩| 亚洲二区在线| 亚洲少妇一区| 一区二区国产在线观看| 亚洲日本国产| 97精品国产99久久久久久免费| 欧美亚洲三级| 精品一区二区三区中文字幕视频| 麻豆精品久久| 日韩av自拍| 日韩精品电影| 日本一区二区免费高清| 久久精品亚洲欧美日韩精品中文字幕| 成人亚洲精品| 日韩精品中文字幕第1页| 成人久久久久| 精品一区在线| 一二三区精品| 欧美日韩91| 欧美激情福利| 日韩高清欧美| 国产色综合网| 少妇高潮一区二区三区99| 91精品丝袜国产高跟在线| 欧美久久香蕉| 精品香蕉视频| 激情91久久| 欧美天堂在线| 91中文字幕精品永久在线| 国产不卡人人| 美女少妇全过程你懂的久久| 亚洲日本欧美| 久久久久伊人| 久久九九精品| 亚洲色图综合| 欧美黄页在线免费观看| 91亚洲国产| 最新国产精品久久久| 国产精品欧美一区二区三区不卡 | 婷婷成人综合| 男女性色大片免费观看一区二区 | 国产在线观看www| 五月天激情综合网| 日韩欧美在线精品| 成人精品久久| 免费久久99精品国产自在现线| 欧美一区免费|