創建型模式之Abstract Factory(抽象工廠)

創建型模式之Abstract Factory(抽象工廠)

摘要:
本文介紹了抽象工廠模式(Abstract Factory),它是一種創建型設計模式,提供了一種創建一系列相關對象的接口而無需指定具體類。文章通過手機工廠示例進行說明,展示小米和華為兩個工廠分別生產不同類型產品(屏幕、芯片、鍵盤等)的實現過程。代碼演示了如何定義抽象工廠接口、具體工廠類和產品類,并展示了運行結果。該模式適用于需要創建產品族且不依賴具體產品類的情況,能夠提高系統的靈活性和可擴展性。

前言

創建型
1.簡單工廠 -->> 2.工廠方法 -->> 3.抽象工廠 -->> 4.生成器 -->> 5.原生 -->> 6.單例
1,接著23種設計模式,創建型模式的抽象工廠開始講解
2,用自己的話理解是:抽象工廠【是生產一類產品或一系列相關的工廠,不需要指定具體的類】,比如手機工廠:小米手機工廠、華為手機工廠、OPPO手機工廠…

1)意圖

提供一個創建一系列相關或相互依賴對象的接口,而無須指定它們具體的類。

2)結構

在這里插入圖片描述

代碼如下:

/*** 抽象工廠demo*/
public class AbstractFactory {public static void main(String[] args) {// 小米生產線 開始制造System.out.println("小米生產線 開始制造-------------------------");Factory factory1 = new ConcreteFactory1();factory1.createProductA().info();factory1.createProductB().info();System.out.println("------------------分界線----------------------");// 華為生產線 繼續開始制造System.out.println("華為生產線 繼續開始制造-------------------------");Factory factory2 = new ConcreteFactory2();factory2.createProductA().info();factory2.createProductB().info();}}interface Factory{// 小米手機生產線ProductA createProductA();// 華為電腦生產線ProductB createProductB();
}/*** 華為電腦工廠*/
class ConcreteFactory2 implements Factory{@Overridepublic ProductA createProductA() {return new ProductA2();}@Overridepublic ProductB createProductB() {return new ProductB2();}
}/*** 小米手機工廠*/
class ConcreteFactory1 implements Factory{@Overridepublic ProductA createProductA() {return new ProductA1();}@Overridepublic ProductB createProductB() {return new ProductB1();}
}/*** 為一類產品聲明一個接口 比如小米手機生產線*/
interface ProductA{void info();
}/*** 為另一類產品聲明一個接口 比如華為手機生產線*/
interface ProductB{void info();
}class ProductB2 implements ProductB{@Overridepublic void info() {System.out.println("產品 B2 華為電腦顯示器");}
}class ProductB1 implements ProductB{@Overridepublic void info() {System.out.println("產品 B1 小米芯片");}
}class ProductA1 implements ProductA{@Overridepublic void info() {System.out.println("產品 A1 小米屏幕");}
}class ProductA2 implements ProductA{@Overridepublic void info() {System.out.println("產品 A2 華為筆記本鍵盤");}
}

運行結果:如下
在這里插入圖片描述
喜歡我的文章記得點個在看,或者點贊,持續更新中ing…

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

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

相關文章

多卡訓練核心技術詳解

多卡訓練核心技術詳解 多卡訓練 主要圍繞分布式環境初始化、模型并行化、數據分片和梯度同步展開。下面結合您的代碼,詳細解釋這些核心部分: 并行執行命令 torchrun --nproc_per_node=5 TokenLossMulCard.py 1. 分布式環境初始化 def init_distributed():init_process_…

OpenCV---minAreaRect

一、基本概念與用途 minAreaRect是OpenCV中用于計算點集的最小面積旋轉矩形的函數。在計算機視覺領域,它常被用于: 目標檢測中獲取傾斜對象的邊界框(如傾斜的車牌、文本行、工業零件)形狀分析與識別(如確定物體的主方…

高端裝備制造企業如何選擇適配的項目管理系統提升項目執行效率?附選型案例

高端裝備制造項目通常涉及多專業協同、長周期交付和高風險管控,因此系統需具備全生命周期管理能力。例如,北京奧博思公司出品的 PowerProject 項目管理系統就是一款非常適合制造企業使用的項目管理軟件系統。 國內某大型半導體裝備制造企業與奧博思軟件達…

如何科學測量系統的最高QPS?

要準確測量系統的最高QPS(Queries Per Second),既不能簡單依賴固定請求數(如2萬次),也不能盲目壓到服務器崩潰。以下是專業的方法論和步驟: 1. 核心原則 目標:找到系統在穩定運行&a…

HTML5實現簡潔的端午節節日網站源碼

HTML5實現簡潔的端午節節日網站源碼 前言一、設計來源1.1 網站首頁界面1.2 端午由來界面1.3 節日活動界面1.4 傳統美食界面1.5 民俗文化界面1.6 登錄界面1.7 注冊界面 二、效果和源碼2.1 動態效果2.2 源代碼 結束語 HTML5實現簡潔的端午節節日網站源碼,酷炫的大氣簡…

使用 `\033` 方式設置終端字體顏色

通過 ANSI 轉義序列(以八進制 \033 開頭 ,十進制 27 ),我們可以在支持的終端中輕松實現這一功能。本文將詳細介紹如何使用 \033 設置字體顏色,并提供 C、C++ 和 Python 的示例代碼。 什么是 ANSI 轉義序列? ANSI 轉義序列是一組特殊的字符序列,用于控制終端的顯示屬性…

脫發因素機器學習數據分析

脫發因素機器學習數據分析 一、背景描述 隨著年齡增長,脫發成為影響外貌與健康的重要問題。 本數據集包含遺傳、荷爾蒙變化、醫療狀況、藥物治療、營養缺乏、心理壓力等12個可能導致脫發的因素, 旨在通過數據分析挖掘各因素與脫發的潛在關聯&#xf…

React 第四十八節 Router中 useMatch 的使用詳細介紹及案例分析

前言 useMatch 是 React Router 中的一個鉤子,用于判斷當前 URL 路徑是否與指定模式匹配,并返回匹配的詳細信息。 它常用于動態路由參數提取、條件渲染和導航高亮等場景。 一、useMatch 核心功能 路徑匹配檢測:判斷當前路徑是否符合指定模…

ubuntu mysql 8.0.42 基于二進制日志文件位置和GTID主從復制配置

目錄 1 操作系統信息 2 MySql數據庫版本 3 主機列表 4 MySQL服務器都安裝依賴 5 主庫服務器安裝mysql軟件步驟: 6 從服務器安裝mysql軟件步驟 7 基于二進制日志文件位置的主從復制配置 8 使用全局事務標識符進行主從復制(GTID) 9 部署過程遇到問題 1 操作系…

鴻蒙OSUniApp滑動鎖屏實戰:打造流暢優雅的移動端解鎖體驗#三方框架 #Uniapp

UniApp滑動鎖屏實戰:打造流暢優雅的移動端解鎖體驗 引言 移動應用的安全性和用戶體驗是開發中不可忽視的重要環節。滑動鎖屏作為一種直觀、安全且用戶友好的解鎖方式,在移動應用中得到廣泛應用。本文將深入探討如何使用UniApp框架實現一個功能完備、動…

專場回顧 | 重新定義交互,智能硬件的未來設計

自2022年起,中國智能硬件行業呈現出蓬勃發展的態勢,市場規模不斷擴大。一個多月前,“小智AI”在短視頻平臺的爆火將智能硬件帶向了大眾視野,也意味著智能硬件已不再僅僅停留在概念和技術層面,而是加速邁向實際落地應用…

zynq 級聯多個ssd方案設計(ECAM BUG修改)

本文講解采用zynq7045芯片如何實現200T容量高速存儲方案設計,對于大容量高速存儲卡,首先會想到采用pcie switch級聯方式,因為單張ssd的容量是有限制的(目前常見的m.2接口容量為4TB,U.2接口容量為16TB)&…

中國區域每月地下水水位柵格數據集(2005-2022)

時間分辨率:月空間分辨率:1km - 10km共享方式:開放獲取數據大小:8.52 GB數據時間范圍:2005-01-01 — 2022-12-01元數據更新時間:2024-09-09 數據集摘要 數據集“GWs_cn_1km”提供了2005年至2022年中國區域…

鴻蒙OSUniApp導航欄組件開發:打造清新簡約的用戶界面#三方框架 #Uniapp

UniApp 開發實戰:打造符合鴻蒙設計風格的日歷活動安排組件 在移動應用開發中,日歷和活動安排是非常常見的需求。本文將詳細介紹如何使用 UniApp 框架開發一個優雅的日歷活動安排組件,并融入鴻蒙系統的設計理念,實現一個既美觀又實…

在 HTML 文件中添加圖片的常用方法

本文詳解HTML圖片插入方法&#xff1a;1&#xff09;通過<img>標簽實現&#xff0c;必須含src和alt屬性&#xff1b;2&#xff09;路徑支持絕對/相對引用&#xff1b;3&#xff09;建議設置width/height保持比例&#xff1b;4&#xff09;響應式方案用srcset適配不同設備…

LangChain-自定義Tool和Agent結合DeepSeek應用實例

除了調用LangChain內置工具外&#xff0c;也可以自定義工具 實例1&#xff1a; 自定義多個工具 from langchain.agents import initialize_agent, AgentType from langchain_community.agent_toolkits.load_tools import load_tools from langchain_core.tools import tool, …

代碼隨想錄算法訓練營第60期第五十天打卡

大家好&#xff0c;首先感慨一下&#xff0c;時間過的真是快&#xff0c;不知不覺我們的訓練營就已經到第五十天了&#xff0c;首先祝賀自己一直在堅持&#xff0c;今天是我們動態規劃章節的收官之戰&#xff0c;明天我們就會走進一個全新的算法章節單調棧&#xff0c;我們要為…

如何發布npm包?

如何發布npm包&#xff1f; 1. 注冊賬號[npm官網](https://www.npmjs.com/)2. 檢查 npm 源是否在官方 npm 倉庫&#xff0c;如果不在&#xff0c;進行切換3. 檢查4. 打包配置5. 發布6. 使用錯誤&#xff1a;版本更新命令 1. 注冊賬號npm官網 2. 檢查 npm 源是否在官方 npm 倉庫…

AI工具使用的最佳實踐,如何通過AI工具提高創作與工作效率

隨著科技的迅猛發展&#xff0c;人工智能&#xff08;AI&#xff09;已從遙不可及的未來構想&#xff0c;轉變為廣泛應用于各行業的實用工具。AI不僅在內容創作、設計、寫作等領域展現出巨大潛力&#xff0c;還通過自動化和智能化顯著提升了工作效率。本文將深入探討如何通過選…

漏洞Reconfigure the affected application to avoid use of weak cipher suites. 修復方案

修復方案&#xff1a;禁用弱加密套件&#xff08;Weak Cipher Suites&#xff09; 1. 確認當前使用的加密套件 在修復前&#xff0c;先檢查應用程序或服務器當前支持的加密套件&#xff1a; OpenSSL (適用于HTTPS/TLS服務)openssl ciphers -v ALL:COMPLEMENTOFALL | sortNgi…