抽象工廠模式(AbstractFactoryPattern)

文章目錄

  • 1.抽象工廠模式定義
  • 2.UML類圖
  • 3.抽象工廠模式具體實現
    • 工廠模式實現單一產品族
    • 抽象工廠實現多產品族
    • 產品類
    • 工廠類
    • 使用
  • 4.抽象工廠模式優缺點

1.抽象工廠模式定義

提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。 工廠方法模式是單一產品族,抽象工廠方模式是多系列產品族。

2.UML類圖

在這里插入圖片描述

  • 抽象工廠:聲明了創建抽象產品對象的操作接口。
  • 具體產品工廠:實現了抽象工廠的接口,負責創建產品對象。
  • 產品抽象類或接口:定義一類產品對象的接口。
  • 具體產品實現:定義一個將被相應具體工廠創建的產品對象。

3.抽象工廠模式具體實現

本文基于生產電腦周邊產品的例子

工廠模式實現單一產品族

public abstract class Keyboard 
{// 生產鍵盤public abstract void Create();
}public class HPKeyboard : Keyboard
{public override void Create(){Console.WriteLine("生產惠普鍵盤");}
}public class DellKeyboard : Keyboard
{public override void Create(){Console.WriteLine("生產戴爾鍵盤");}
}public class LenovoKeyboard : Keyboard
{public override void Create(){Console.WriteLine("生產聯想鍵盤");}
}// 鍵盤工廠抽象類
public abstract class KeyboardFactory
{// 取得鍵盤實例public abstract Keyboard GetInstance();
}public class HPKeyboardFactory : KeyboardFactory
{public override Keyboard GetInstance(){return new HPKeyboard();}
}public class DellKeyboardFactory : KeyboardFactory
{public override Keyboard GetInstance(){return new DellKeyboard();}
}public class LenoveKeyboardFactory : KeyboardFactory
{public override Keyboard GetInstance(){return new LenovoKeyboard();}
}

使用:

// 生產惠普鍵盤
new HPKeyboardFactory().GetInstance().Create();
// 生產戴爾鍵盤
new DellKeyboardFactory().GetInstance().Create();
// 生產聯想鍵盤
new LenoveKeyboardFactory().GetInstance().Create();

抽象工廠實現多產品族

產品類

// 鼠標抽象類
public abstract class Mouse
{public abstract void Create();
}public class DellMouse : Mouse
{public override void Create(){Console.WriteLine("生產戴爾鼠標");}
}public class HPMouse : Mouse
{public override void Create(){Console.WriteLine("生產惠普鼠標");}
}// 顯示器抽象類
public abstract class Monitor
{public abstract void Create();
}public class DellMonitor : Monitor
{public override void Create(){Console.WriteLine("生產戴爾顯示器");}
}public class HPMonitor : Monitor
{public override void Create(){Console.WriteLine("生產惠普顯示器");}
}

工廠類

// 工廠抽象類。工廠分為Dell工廠和HP工廠,各自負責品牌內產品的創建
public abstract class Factory
{public abstract Keyboard CreateKeyboard();public abstract Mouse CreateMouse();public abstract Monitor CreateMonitor();
}public class DellFactory : Factory
{public override Keyboard CreateKeyboard(){return new DellKeyboard();}public override Monitor CreateMonitor(){return new DellMonitor();}public override Mouse CreateMouse(){return new DellMouse();}
}public class HPFactory : Factory
{public override Keyboard CreateKeyboard(){return new HPKeyboard();}public override Monitor CreateMonitor(){return new HPMonitor();}public override Mouse CreateMouse(){return new HPMouse();}
}

使用

// 抽象工廠模式
Console.WriteLine("----------------------- 抽象工廠模式 ----------------------------");
new DellFactory().CreateKeyboard().Create();    // 生產戴爾鍵盤
new DellFactory().CreateMonitor().Create();     // 生產戴爾顯示器
new DellFactory().CreateMouse().Create();       // 生產戴爾鼠標new HPFactory().CreateKeyboard().Create();      // 生產惠普鍵盤
new HPFactory().CreateMonitor().Create();      // 生產惠普顯示器
new HPFactory().CreateMouse().Create();      // 生產惠普鼠標

4.抽象工廠模式優缺點

  • 優點:當一個產品族中的多個對象被設計成一起工作時,它能保證客戶端始終只使用同一個產品族中的對象。
  • 缺點:產品族擴展非常困難,要增加一個系列的某一產品,既要在抽象的 Creator 里加代碼,又要在具體的里面加代碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14211.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14211.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14211.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024電工杯B題食譜評價與優化模型思路代碼論文分析

2024年電工杯數學建模競賽B題論文和代碼已完成,代碼為B題全部問題的代碼,論文包括摘要、問題重述、問題分析、模型假設、符號說明、模型的建立和求解(問題1模型的建立和求解、問題2模型的建立和求解、問題3模型的建立和求解)、模型…

正點原子[第二期]Linux之ARM(MX6U)裸機篇學習筆記-17講 定時器按鍵消抖

前言: 本文是根據嗶哩嗶哩網站上“正點原子[第二期]Linux之ARM(MX6U)裸機篇”視頻的學習筆記,在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。…

計算機網絡安全控制技術

1.防火墻技術 防火墻技術是近年來維護網絡安全最重要的手段,但是防火墻不是萬能的,需要配合其他安全措施來協同 2.加密技術 目前加密技術主要有兩大類:對稱加密和非對稱加密 3.用戶識別技術 核心是識別網絡者是否是屬于系統的合法用戶 …

【設計模式深度剖析】【1】【結構型】【代理模式】| 玩游戲打怪、升級為例加深理解

👈?上一篇:創建型設計模式對比 | 下一篇:裝飾器模式👉? 目 錄 代理模式定義英文原話直譯如何理解? 3個角色UML類圖1. 抽象主題(Subject)角色2. 代理類:代理主題(Proxy Subject&#xff0…

UE5 OnlineSubsystem Steam創建會話失敗解決方法

連接上Steam但是創建會話失敗 解決方法 在DefaultEngine.ini中加上bInitServerOnClienttrue,這個其實在官方文檔里用注釋給出了,直接取消注釋就行 刪除項目目錄中的Saved、Internmediate、Binaries目錄 右鍵你的項目.uproject選擇Generate Visual Studio project f…

ASP.Net MVC在控制臺添加視圖時沒有模型類并且不能添加視圖

情況如下: 解決方法: 1.查看vs能否創建asp.net mvc項目,這種情況一般是更換了vs打開老項目 2.點擊跳轉至修改安裝選項界面 3.選擇安裝項即可 如果以上都有: 看看你的視圖文件是否存在在項目中 也不能點擊添加,如果…

探索數值分析的奧秘:掌握NumPy與Pandas基礎

新書上架~👇全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目錄 一、NumPy:數值計算的效率提升器 二、Pandas:數據處理與分析的利器 …

Linux文本三劍客之sed

set的定義: sed是一種流編輯器,流編輯器會在編輯器處理數據之前基于預先提供的一組規則來編輯數據流。 sed編輯器可以根據命令來處理數據流中的數據,這些命令要么從命令行中輸入,要么存儲在一個命令文本文件中。 sed的執行過程&a…

Nextjs 動態路由獲取參數

目錄 一、創建page目錄下的路由文件 二、通過useRouter來獲取動態參數 先看官方文檔:Routing: Dynamic Routes | Next.js 使用Nextjs13版本參考官方文檔后實現仍有問題,網上的材料大多和官網一致,經過測試后,我找到了這個解決方…

【日記】今天好困(407 字)

正文 4T 硬盤降價了,好心動。雖然只降了 10 塊錢……. 為什么硬盤這么貴啊!哼。 柜面上雜事好多。雖然一天到晚見不到幾個客戶,但雜事就是很多。一個頭兩個大。也不知道從哪兒冒出來的這么多事。 芒果干到了!還沒去取,…

sql把一個表的某幾列的數據存到另一個表里

一.如何用slq語句把一個表中的某幾個字段的數據插入到另一個新表中,就要用下面這條slq語句: insert into 表名1(字段1,字段2) select 字段1,字段2 from 表名2 這里有一點值得注意的是這2個字段要一一對應,并且按順序。 二.如果另一個表是…

JAVASE之類和對象(1)

路雖遠,行則將至;事雖難,做則必成。 主頁:趨早——Step 專欄:JAVASE gitte:https://gitee.com/good-thg 引言: 這篇文章我們只介紹前半部分,下一篇文章會介紹剩下的部分。 目錄 一、…

LeetCode 面試150

最近準備面試,我以前不愿意面對的 現在保持一顆本心,就是專注于算法思想,語言基礎的磨煉; 不為速成,不急功近利的想要比賽,或者為了面試。 單純的本心,體驗算法帶來的快樂,是一件非常…

Python操作MySQL數據庫的工具--sqlalchemy

文章目錄 一、pymysql和sqlalchemy的區別二、sqlalchemy的詳細使用1.安裝庫2.核心思想3.整體思路4.sqlalchemy需要連接數據庫5.使用步驟1.手動提前創建數據庫2.使用代碼創建數據表3.用代碼操作數據表3.1 增加數據3.2 查詢數據3.3 刪除數據3.4 修改數據 一、pymysql和sqlalchemy…

2025秋招深度學習基礎面試題(一)

01. 卷積和BN如何融合提升推理速度 Conv和BN的融合:在網絡的推理階段,可以將BN層的運算融合到Conv層中,減少運算量,加速推理。本質上是修改了卷積核的參數,在不增加Conv層計算量的同時,略去了BN層的計算量。def fuse_conv_bn(conv, bn):std = (bn.running_var + bn.eps).…

數據倉庫、數據中臺、大數據平臺之間的關系

數據行業經常會出現數據倉庫、數據中臺、大數據平臺等概念,容易產生疑問,它們中間是相等,還是包含的關系? 數據中臺和數據倉庫概念的關系 數據中臺概念是包含數據倉庫的,數據倉庫是數據中臺中的一部分,包含…

探索Facebook:數字社交的新時代

Facebook,作為全球最大的社交網絡平臺之一,一直在引領著數字社交的發展潮流。隨著科技的不斷進步和社會的不斷變遷,Facebook也在不斷演進和創新,迎接著數字社交的新時代。本文將探索Facebook在數字社交領域的新發展,以…

Behind the Code:Polkadot 如何重塑 Web3 未來

2024 年 5 月 17 日 Polkadot 生態 Behind the Code 第二季第一集 《創造 Web3 的未來》正式上線。第一集深入探討了 Polkadot 和 Web3 技術在解決數字身份、數據所有權和去中心化治理方面的巨大潛力。 🔍 查看完整視頻: https://youtu.be/_gP-M5nUidc?…

抖音視頻怎么去水印保存部分源碼|短視頻爬蟲提取收集下載工具

抖音視頻怎么去水印保存部分源碼|短視頻爬蟲提取收集下載工具 抖音視頻去水印保存部分源碼: 通過使用Python中的requests、re和os等庫,可以編寫如下代碼來實現抖音視頻去水印保存的功能。 短視頻爬蟲提取手機下載工具的使用方法: 該工具主…

BevDet-4d(2): 環境安裝及效果展示

1. 環境安裝 conda create -n bevdet python=3.8 conda activate bevdet ? # 3 虛擬環境bevdet中安裝torch pip install spconv pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch