【設計模式】基于 Java 語言實現工廠模式

目錄

一、簡單工廠模式

1.1 簡單工廠模式的介紹

二、工廠方法模式

2.1 工廠方法模式的介紹

2.2 工廠方法模式的基本實現

2.3 工廠方法模式的應用場景

三、抽象工廠

3.1 抽象工廠的概念

3.2 抽象工廠的基本結構

3.3 抽象工廠的基本實現

3.4 抽象工廠的應用場景

四、工廠模式的總結

4.1 工廠模式優點和缺點

4.2 工廠模式的適用場景

4.2.1 線程工廠(ThreadFactory)

4.2.2 Bean 工廠(FactoryBean)


工廠模式是一種創建型設計模式,它提供了一種封裝對象實例化過程的方法,使客戶端無需了解具體的實現細節即可獲得所需的對象。通過定義一個用于創建對象的接口(工廠),讓子類決定具體實例化哪一個產品類,從而使得代碼在應對變化時更加靈活且易于擴展。

通俗地講,工廠模式的本質就是用工廠方法,代替 new 操作創建一種實例化對象的方式。

一、簡單工廠模式

1.1 簡單工廠模式的介紹

簡單??模式是?種創建型設計模式,但并不屬于23種設計模式之?,更多的是?種編程習慣。

簡單??模式的核?思想:將產品的創建過程封裝在?個??類中,把創建對象的流程集中在這個??類??。

簡單??模式的角色:

  1. 抽象產品:描述產品的通??為,通常由一個 Java 接口或一個 Java 抽象類定義。

  2. 具體產品: 實現抽象產品接?或繼承抽象產品類。

  3. ??類:負責創建產品,根據傳遞的不同參數創建不同的產品示例。

簡單??類簡化了客戶端操作,客戶端可以調????法來獲取具體產品,??需直接與具體產品類交互,降低了耦合,但是有?個很?的問題就是不夠靈活,如果需要添加新的產品,就需要修改??類的代碼。

簡單工廠的缺點:單??模式只有?個??類,負責創建所有產品,如果要添加新的產品,通常需要修改??類的代碼。

二、工廠方法模式

2.1 工廠方法模式的介紹

???法模式也是?種創建型設計模式:???法模式引?了抽象??和具體??的概念,每個具體??只負責創建?個具體產品,添加新的產品只需要添加新的??類??需修改原來的代碼,這樣就使得產品的?產更加靈活,?持擴展,符合開閉原則。

???法模式分為以下?個??:

  • 抽象??:?個接?,包含?個抽象的???法(?于創建產品對象)。

  • 具體??:實現抽象??接?,創建具體的產品。

  • 抽象產品:定義產品的接?。

  • 具體產品:實現抽象產品接?,是??創建的對象。

2.2 工廠方法模式的基本實現

// 抽象產品
interface Shape {void draw();
}// 具體產品 - 圓形
class Circle implements Shape {@Overridepublic void draw() {System.out.println("Circle");}
}// 具體產品 - 正?形
class Square implements Shape {@Overridepublic void draw() {System.out.println("Square");}
}// 抽象??
interface ShapeFactory {Shape createShape();
}// 具體?? - 創建圓形
class CircleFactory implements ShapeFactory {@Overridepublic Shape createShape() {return new Circle();}
}
// 具體?? - 創建正?形
class SquareFactory implements ShapeFactory {@Overridepublic Shape createShape() {return new Square();}
}
/

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

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

相關文章

OpenCV CUDA模塊中的矩陣算術運算------創建卷積操作對象的工廠方法 cv::cuda::createConvolution

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 createConvolution函數是OpenCV CUDA 模塊中用于創建卷積操作對象的工廠方法。它返回一個指向 cv::cuda::Convolution 接口的智能指針&#xff0…

IDEA:程序編譯報錯:java: Compilation failed: internal java compiler error

目錄 簡介異常信息排查原因解決 簡介 代碼無法編譯、無法打包 異常信息 java: Compilation failed: internal java compiler error排查 1、代碼近期沒有改動過,原先是可以正常編譯的 2、查看程序JDK,是JDK1.8沒錯,與原先JDK一致 3、出現…

windows 10 做服務器 其他電腦無法訪問,怎么回事?

一般我們會先打開win10自己的防火墻策略,但是容易忽略 電腦之間 路由器上的防火墻,此時也需要查看一下,可以嘗試先關閉路由器防火墻,如果可以了,再 設置路由器上的防火墻規則。 將路由器的上網設置 改成 路由模式 &a…

【人工智能-agent】--Dify+Mysql+Echarts搭建了一個能“聽懂”人話的數據可視化助手!

Echarts官網:https://echarts.apache.org/zh/index.html ECharts 是一個由百度團隊開發的、基于 JavaScript 的開源可視化圖表庫,它提供了豐富的圖表類型和強大的交互功能,能夠幫助開發者輕松創建專業級的數據可視化應用。 核心特點 豐富的圖…

Android設備 顯示充電速度流程

整體邏輯:設備充電速度的判斷 系統通過讀取充電器的最大電流(Current)與最大電壓(Voltage),計算最大充電功率(Wattage),以此判斷當前是慢充、普通充還是快充&#xff1a…

十一、Hive JOIN 連接查詢

作者:IvanCodes 日期:2025年5月16日 專欄:Hive教程 在數據分析的江湖中,數據往往分散在不同的“門派”(表)之中。要洞察數據間的深層聯系,就需要JOIN這把利器,將相關聯的數據串聯起來…

Excel在每行下面插入數量不等的空行

1、在B列輸入要添加的空行數量(如果加7行,則寫6,也可以插入數量不等的空行) 2、在C1單元格輸入1 3、在C2輸入公式:SUM($B$1:B1)1,下拉填充 4、在C9單元格輸入1 5、選中C9單元格-->選擇菜單欄“開始”…

iOS熱更新技術要點與風險分析

iOS的熱更新技術允許開發者在無需重新提交App Store審核的情況下,動態修復Bug或更新功能,但需注意蘋果的審核政策限制。以下是iOS熱更新的主要技術方案及要點: 一、主流熱更新技術方案 JavaScript動態化框架 React Native & Weex 通過Jav…

服務器多用戶共享Conda環境操作指南——Ubuntu24.02

1. 使用阿里云鏡像下載 Anaconda 最新版本 wget https://mirrors.aliyun.com/anaconda/archive/Anaconda3-2024.02-1-Linux-x86_64.sh bug解決方案 若出現:使用wget在清華鏡像站下載Anaconda報錯ERROR 403: Forbidden. 解決方案:wget --user-agent“M…

基于YOLO算法的目標檢測系統實現指南

YOLO(You Only Look Once)作為計算機視覺領域最具影響力的實時目標檢測算法之一,其最新版本YOLOv8在速度與精度之間達到了新的平衡。本文將從技術實現角度,詳細介紹如何使用YOLO算法構建高效的目標檢測系統。 一、算法原理與技術架構 1.1 YOLO核心思想…

C++ asio網絡編程(6)利用C11模擬偽閉包實現連接的安全回收

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、智能指針管理Session二、用智能指針來實現Server的函數1.start_accept()1.引用計數注意點2.std::bind 與異步回調函數的執行順序分析 2.handle_accept1.異步…

AI與產品架構設計(2):Agent系統的應用架構與落地實

什么是AI Agent?其在架構中的獨特定位 AI Agent(人工智能代理)是一種模擬人類智能行為的自主系統,通常以大型語言模型(LLM)作為核心引擎。簡單來說,Agent能夠像人一樣感知環境信息、規劃行動方…

Rust 數據結構:String

Rust 數據結構:String Rust 數據結構:String什么是字符串?創建新字符串更新字符串將 push_str 和 push 附加到 String 對象后使用 運算符和 format! 宏 索引到字符串字符串在內存中的表示字節、標量值和字形簇 分割字符串遍歷字符串的方法 R…

Java卡與SSE技術融合實現企業級安全實時通訊

簡介 在數字化轉型浪潮中,安全與實時數據傳輸已成為金融、物聯網等高安全性領域的核心需求。本文將深入剖析東信和平的Java卡權限分級控制技術與浪潮云基于SSE的大模型數據推送技術,探索如何將這兩項創新技術進行融合,構建企業級安全實時通訊系統。通過從零到一的開發步驟,…

繼MCP、A2A之上的“AG-UI”協議橫空出世,人機交互邁入新紀元

第一章:AI交互的進化與挑戰 1.1 從命令行到智能交互 人工智能的發展歷程中,人機交互的方式經歷了多次變革。早期的AI系統依賴命令行輸入,用戶需通過特定指令與機器溝通。隨著自然語言處理技術的進步,語音助手和聊天機器人逐漸普…

MySQL刷題相關簡單語法集合

去重 distinct 關鍵字 eg. :select distinct university from user_profile 返回行數限制: limit關鍵字 eg. :select device_id from user_profile limit 2 返回列重命名:as 關鍵字 eg.:select device_id as user_in…

Kubernetes MCP服務器(K8s MCP):如何使用?

#作者:曹付江 文章目錄 1、什么是 Kubernetes MCP 服務器?1.1、K8s MCP 服務器 2、開始前的準備工作2.1. Kubernetes集群2.2. 安裝并運行 kubectl2.3. Node.js 和 Bun2.4. (可選)Helm v3 3、如何設置 K8s MCP 服務器3.1. 克隆存儲…

計算機網絡-HTTP與HTTPS

文章目錄 計算機網絡網絡模型網絡OSITCP/IP 應用層常用協議HTTP報文HTTP狀態碼HTTP請求類型HTTP握手過程HTTP連接HTTP斷點續傳HTTPSHTTPS握手過程 計算機網絡 網絡模型 為了解決多種設備能夠通過網絡相互通信,解決網絡互聯兼容性問題。 網絡模型是計算機網絡中用于…

Springboot 跨域攔截器配置說明

錯誤代碼 跨域設置 Configuration public class WebConfig implements WebMvcConfigurer {/*** cors 跨域配置*/Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedMethods("GET", "HEAD", &qu…

受不了github的網絡限制了,我開源了一個圖床工具 gitee-spring-boot-starter

嗨嗨嗨~ 我老馬又又來了!!!上次寫了一篇我開源了一款阿里云OSS的spring-boot-starter,然后買的資源包到期了,后面又想白(開)嫖(源)的路子,首先想到了使用gith…