国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区

當前位置:首頁 > 科技  > 軟件

三言兩語說透設計模式的藝術-工廠方法模式

來源: 責編: 時間:2023-08-09 23:04:07 403觀看
導讀1寫在前面前面寫到簡單工廠模式雖然比較簡單,將實例的創建和使用分類,客戶端只需使用由工廠類創建的對象即可,無需關心對象的創建過程。但是這個系統仍然存在問題:1)工廠類過于龐大,包含了大量的if判斷語句代碼,導致維護和測

1寫在前面

前面寫到簡單工廠模式雖然比較簡單,將實例的創建和使用分類,客戶端只需使用由工廠類創建的對象即可,無需關心對象的創建過程。但是這個系統仍然存在問題:zAh28資訊網——每日最新資訊28at.com

1)工廠類過于龐大,包含了大量的if判斷語句代碼,導致維護和測試難度增加;zAh28資訊網——每日最新資訊28at.com

2)當前只存在一個工廠類,在需要添加新產品時,由于靜態工廠方法通過傳入參數創建不同的產品,必須修改工廠了的源碼,違背了開閉原則。zAh28資訊網——每日最新資訊28at.com

對此,需要對簡單工廠模式進行優化,使其具有更好的靈活性和擴展性。這也是工廠方法模式的由來。zAh28資訊網——每日最新資訊28at.com

2工廠方法模式

工廠方法模式(Factory Method Pattern)是簡單工廠模式的進一步抽象和推廣。在工廠方法模式中,不再提供一個統一的工廠類來創建所有的產品對象,而是針對不同產品提供不同的工廠,使每個工廠只負責創建對應的產品。zAh28資訊網——每日最新資訊28at.com

工廠方法模式,是對簡單工廠模式進行重構,即定義一個用于創建對象的接口,讓子類決定實例化哪個類。工廠方法使一個類的實例化延遲到其子類。zAh28資訊網——每日最新資訊28at.com

工廠方法模式包含以下主要角色:zAh28資訊網——每日最新資訊28at.com

  • 抽象工廠(Abstract Factory):提供了創建產品的接口,調用者通過它訪問產品。
  • 具體工廠(ConcreteFactory):實現了抽象工廠接口,完成具體產品的創建。
  • 抽象產品(Product):定義了產品的規范,描述了產品的主要特性和功能。
  • 具體產品(ConcreteProduct):實現了抽象產品角色所定義的接口,由具體工廠來創建,它同具體工廠之間往往存在依賴關系。

工廠方法模式的主要優點:zAh28資訊網——每日最新資訊28at.com

  • 封裝了產品創建過程,調用者只需關心所需產品類型。
  • 實現了開閉原則,增加新產品無需修改之前工廠類代碼。
  • 調用者無需知道產品類名,實現解耦,符合依賴倒轉原則。
  • 易于擴展新產品,滿足開閉原則,增加新產品僅需新增一個具體產品類和具體工廠類,無需修改現存代碼。

可能的缺點:zAh28資訊網——每日最新資訊28at.com

  • 每增加一個產品就需要增加一個具體工廠,導致系統中類的個數成倍增加。
  • 復雜產品需要對應復雜工廠類,不易維護。

3工廠方法模式的實現

我們使用 Typescript 代碼來實現一個簡單的工廠方法模式:zAh28資訊網——每日最新資訊28at.com

首先定義抽象產品類和具體產品類:zAh28資訊網——每日最新資訊28at.com

interface Food {  getType(): string;}class Hamburger implements Food {  getType() {    return 'Hamburger';  }}class Hotdog implements Food {  getType() {    return 'Hotdog';  }}

然后是抽象工廠類和具體工廠類:zAh28資訊網——每日最新資訊28at.com

abstract class FoodFactory {  abstract createFood(): Food;}class HamburgerFactory extends FoodFactory {  createFood() {    return new Hamburger();  }}class HotdogFactory extends FoodFactory {  createFood() {    return new Hotdog();  }}

客戶端代碼:zAh28資訊網——每日最新資訊28at.com

const hamburgerFactory = new HamburgerFactory();const hamburger = hamburgerFactory.createFood();const hotdogFactory = new HotdogFactory();const hotdog = hotdogFactory.createFood();

客戶端通過具體工廠來獲取需要的產品,不關心實際產品類名。zAh28資訊網——每日最新資訊28at.com

在抽象工廠中使用泛型

我們可以使用泛型來定義產品類型:zAh28資訊網——每日最新資訊28at.com

interface FoodFactory<T extends Food> {  createFood(): T; }// 實現時指定泛型class HamburgerFactory implements FoodFactory<Hamburger> {  // ...}

這樣可以使工廠方法返回類型更加明確。zAh28資訊網——每日最新資訊28at.com

將工廠抽象成函數

工廠方法也可以簡單實現為函數:zAh28資訊網——每日最新資訊28at.com

function createFood(type: 'Hamburger' | 'Hotdog') {  switch(type) {    case 'Hamburger':       return new Hamburger();    case 'Hotdog':      return new Hotdog();  }}

這種方式更簡單,降低了代碼的復雜度,但缺少面向對象的靈活性。zAh28資訊網——每日最新資訊28at.com

工廠方法模式 vs 簡單工廠模式

簡單工廠模式中工廠類負責所有產品的創建;而工廠方法模式中每一個具體工廠類只負責創建對應的一個產品,它將產品的創建推遲到子類。zAh28資訊網——每日最新資訊28at.com

兩者區別主要在:zAh28資訊網——每日最新資訊28at.com

  • 簡單工廠中,工廠類負責所有產品創建。
  • 工廠方法中,每個具體工廠只負責對應的產品。
  • 工廠方法模式更加靈活,易擴展,但創建對象較多。

簡單工廠適合產品種類少的情況,工廠方法適合產品不斷擴展的場景。zAh28資訊網——每日最新資訊28at.com

應用實例:游戲工廠

我們可以使用工廠方法模式實現一個游戲工廠,用于生成不同類型的游戲對象。zAh28資訊網——每日最新資訊28at.com

首先是游戲基類和具體游戲類:zAh28資訊網——每日最新資訊28at.com

interface Game {  start();}class RPG implements Game {  start() {    console.log('Starting RPG game');  } }class MMORPG implements Game {  start() {    console.log('Starting MMORPG game');  }}

然后是抽象工廠和具體工廠:zAh28資訊網——每日最新資訊28at.com

abstract class GameFactory {  abstract createGame(): Game;}class RPGFactory extends GameFactory {  createGame() {    return new RPG();  }}class MMORPGFactory extends GameFactory {  createGame() {   return new MMORPG();   }}

客戶端代碼:zAh28資訊網——每日最新資訊28at.com

const rpgFactory = new RPGFactory();const rpgGame = rpgFactory.createGame();rpgGame.start();const mmorpgFactory = new MMORPGFactory();const mmorpgGame = mmorpgFactory.createGame();mmorpgGame.start();

客戶端只需要關心游戲類型,而不關心具體類名。zAh28資訊網——每日最新資訊28at.com

4總結

工廠方法模式是一種廣泛使用的設計模式,它具有以下核心特點:zAh28資訊網——每日最新資訊28at.com

  • 抽象工廠類負責定義創建對象的接口,而由子類實現CreateObject方法,實現了責任分解。
  • 每個具體工廠類只負責創建對應的一個產品,一個工廠類對應一個產品類。
  • 調用者只需要關心所需產品的類型,無需知道產品類名,實現了解耦。
  • 易于擴展新產品,滿足開閉原則,當新增產品時只要增加一個具體工廠和產品類,無需修改之前代碼。
  • 典型應用場景是針對同一抽象產品類有多個具體產品類的情況,而系統需要根據環境情況動態獲得不同的具體產品對象。
  • 相比簡單工廠模式,工廠方法模式更加靈活,易擴展,但創建對象較多。

綜上,工廠方法模式通過面向對象封裝了對象創建過程,實現低耦合、高內聚的代碼,給系統提供了靈活的產品擴展方式,是非常流行與常用的設計模式。zAh28資訊網——每日最新資訊28at.com

本文鏈接:http://m.rrqrq.com/showinfo-26-5206-0.html三言兩語說透設計模式的藝術-工廠方法模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 分享幾款好用且免費的項目管理工具

下一篇: 阿里云張勇:AI云服務需求非常旺盛

標簽:
  • 熱門焦點
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
午夜精品久久久久久久久久久| 成人av资源下载| 精品一区二区三区在线观看国产 | 国产日韩欧美三区| 欧美日本一区二区三区| 久久免费看少妇高潮| 一区二区欧美在线观看| 狠狠色丁香久久婷婷综| 激情久久婷婷| 欧美年轻男男videosbes| 中日韩av电影| 精一区二区三区| 欧美日韩精品伦理作品在线免费观看| 久久久久久亚洲精品杨幂换脸| 日韩精品一区二区三区视频播放| 一区二区三区在线视频播放| 成人av在线资源| 色综合激情久久| 国产精品久久免费看| 国产久卡久卡久卡久卡视频精品| 最新日韩欧美| 久久久午夜电影| 国模娜娜一区二区三区| 国产婷婷精品| 国产精品视频免费看| 国产综合色在线视频区| 中文一区二区在线观看| 日本人妖一区二区| 一区在线免费观看| 久久综合成人精品亚洲另类欧美 | 亚洲免费在线看| 亚洲男人的天堂一区二区 | 亚洲性图久久| 久久久7777| 中文字幕不卡的av| 韩国欧美一区二区| 国产伦一区二区三区色一情| 视频一区在线播放| 亚洲欧美日韩国产成人精品影院| 国产福利精品一区二区| 久久国产日本精品| 亚洲情趣在线观看| 91蜜桃免费观看视频| 在线成人小视频| 欧美bbbbb| 一本一本大道香蕉久在线精品 | www.性欧美| 欧美日韩精品专区| 免播放器亚洲一区| 久久精品系列| 首页亚洲欧美制服丝腿| 亚洲一区久久| 亚洲成年人网站在线观看| 1024亚洲| 亚洲激情五月婷婷| 亚洲免费高清| 亚洲乱码中文字幕| 夜夜嗨网站十八久久| 有坂深雪av一区二区精品| 在线视频国内自拍亚洲视频| 国产精品传媒视频| 一区二区三区我不卡| 亚洲视频在线一区| 夜夜爽av福利精品导航| 亚洲一级在线观看| 久久国产主播| 美女网站在线免费欧美精品| 一本色道综合亚洲| 久久国产视频网| 欧美日韩不卡一区| 国产福利视频一区二区三区| 精品美女被调教视频大全网站| 成人精品电影在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 91尤物视频在线观看| 国产人成一区二区三区影院| 极品av少妇一区二区| 一区二区三区影院| 99久久精品情趣| 久久久久99精品一区| 国内视频精品| 亚洲激情自拍偷拍| 欧美一区二区成人6969| 伊人久久大香线蕉综合热线 | 国产三区二区一区久久| 欧美主播一区二区三区| 久久久久久久波多野高潮日日| 欧美sm重口味系列视频在线观看| 亚洲欧洲av一区二区三区久久| 91精品欧美久久久久久动漫| 久久精品男人天堂av| 日韩黄色一级片| 蜜臀av性久久久久蜜臀av麻豆| 久久久久国产一区二区三区四区| 久热这里只精品99re8久| 成人美女在线观看| 蜜桃av噜噜一区二区三区小说| 国产精品嫩草影院com| 亚洲一区日韩| 成人黄色网址在线观看| 中文字幕欧美一区| 在线观看一区不卡| 亚洲青色在线| 欧美高清视频一区| 欧美一区免费| 欧美福利电影在线观看| 国产日韩综合| 国产深夜精品| 色av一区二区| 欧美一级电影网站| 欧美日韩视频在线一区二区| 欧美视频一区在线| 91精品国产综合久久精品| 精品国产一区二区三区久久影院| 欧美日韩亚洲综合在线| 久久久精品国产免费观看同学| 欧美日韩午夜在线视频| 欧美一区二区三区婷婷月色| 欧美日韩大陆一区二区| 欧美视频一区二区在线观看| 精品少妇一区二区三区免费观看| 欧美伊人精品成人久久综合97| 久久久久综合| 色香色香欲天天天影视综合网| 亚洲精品美女久久7777777| 久久国产成人| 欧美伊人久久久久久午夜久久久久| 久久青青草综合| 久久亚洲高清| 久久综合图片| 欧美性猛片xxxx免费看久爱| 久久久久九九视频| 亚洲一区二区三区四区五区黄| 日本不卡一区二区| 成人性色生活片| 国产酒店精品激情| 欧美日韩一区综合| a4yy欧美一区二区三区| 亚洲影音一区| 亚洲小说欧美激情另类| 欧美freesex交免费视频| 制服丝袜激情欧洲亚洲| 免费成人在线观看视频| 国产精品女主播av| 日韩精品一区二区三区视频在线观看| 性感少妇一区| 亚洲国产一区二区三区a毛片| 国内精品久久久久影院薰衣草| 亚洲国产另类精品专区| 国产精品久久久久毛片软件| 精品国产乱码久久久久久蜜臀| 91成人网在线| 日韩亚洲不卡在线| 欧美高清视频一区二区三区在线观看| 五月婷婷激情综合网| 亚洲欧洲综合另类| 欧美精品一区二区三区蜜桃| 欧美探花视频资源| 久久综合图片| 国产伦精品一区二区三| 亚洲国产免费看| 国产综合色产| 欧美日韩视频一区二区三区| 丁香激情综合五月| 国产精品99久久久久久有的能看| 免费在线成人网| 青青草原综合久久大伊人精品优势| 亚洲免费在线视频一区 二区| 亚洲婷婷国产精品电影人久久| 国产三级三级三级精品8ⅰ区| 久久人人爽人人爽| 精品国产一区久久| 精品欧美一区二区久久| 精品少妇一区二区三区日产乱码 | 日韩欧美在线观看一区二区三区| 欧美系列亚洲系列| 欧美日韩aaaaa| 欧美日韩国产欧美日美国产精品| 欧美日韩成人综合在线一区二区| 欧美日韩国产另类一区| 欧美私模裸体表演在线观看| 欧美午夜免费电影| 欧美三级电影精品| 日韩精品资源二区在线| 制服丝袜在线91| 日韩一区国产二区欧美三区| 日韩精品中文字幕在线不卡尤物 | 激情亚洲成人| 午夜在线一区二区| 欧美网站一区二区| 欧美一级在线免费| 久久久五月婷婷| 亚洲视频免费看| 午夜国产不卡在线观看视频| 精品中文字幕一区二区小辣椒| 高清成人在线观看| 好吊视频一区二区三区四区| 性伦欧美刺激片在线观看| 欧美亚一区二区| 久久久久亚洲蜜桃|