java工廠模式示例代碼

工廠模式是一種創建型設計模式,它提供了一種將對象的創建與使用分離的方法。在工廠模式中,我們通過工廠類來創建對象,而不是直接在客戶端代碼中使用 new 關鍵字來創建對象。以下是一個簡單的Java工廠模式示例代碼:

產品接口

首先,我們定義一個產品接口,表示工廠要創建的對象:

// 產品接口
public interface Product {void operation();
}

具體產品類

然后,我們定義一些實現產品接口的具體產品類:

// 具體產品類A
public class ConcreteProductA implements Product {@Overridepublic void operation() {System.out.println("Concrete Product A operation");}
}// 具體產品類B
public class ConcreteProductB implements Product {@Overridepublic void operation() {System.out.println("Concrete Product B operation");}
}

工廠接口

接著,我們定義一個工廠接口,用于創建產品:

// 工廠接口
public interface Factory {Product createProduct();
}

具體工廠類

最后,我們定義具體的工廠類來創建產品對象:

// 具體工廠類A,用于創建具體產品類A的實例
public class ConcreteFactoryA implements Factory {@Overridepublic Product createProduct() {return new ConcreteProductA();}
}// 具體工廠類B,用于創建具體產品類B的實例
public class ConcreteFactoryB implements Factory {@Overridepublic Product createProduct() {return new ConcreteProductB();}
}

客戶端代碼

現在,我們可以在客戶端代碼中使用工廠來創建產品對象,而不需要關心具體的產品類:

public class Client {public static void main(String[] args) {// 創建工廠A,并使用它創建具體產品A的實例Factory factoryA = new ConcreteFactoryA();Product productA = factoryA.createProduct();productA.operation();// 創建工廠B,并使用它創建具體產品B的實例Factory factoryB = new ConcreteFactoryB();Product productB = factoryB.createProduct();productB.operation();}
}

示例說明

  • 客戶端代碼只與工廠接口和產品接口打交道,不直接與具體產品類耦合,從而實現了解耦。
  • 如果要添加新的產品,只需創建一個新的具體產品類和一個對應的具體工廠類即可,無需修改現有的代碼,符合開閉原則。
  • 工廠模式提供了一種靈活的方法來創建對象,可以根據具體的需求選擇使用哪個具體工廠來創建產品對象。

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

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

相關文章

BGP實驗:聯邦和發射器實驗

BGP實驗:聯邦和發射器實驗 一、實驗拓撲 二、實驗要求及分析 實驗要求: 1、AS1存在兩個環回,一個地址為192.168.1.0/24,該地址不能再任何協議中宣告; ? AS3存在兩個環回,一個地址為192.168.2.0/24&…

解決ModuleNotFoundError: No module named ‘open_clip‘問題

在使用stable diffusion大模型時,添加一些模型后啟動df頁面報錯:ModuleNotFoundError: No module named open_clip 使用 pip install open_clip命令下載失敗,報錯: Looking in indexes: https://mirrors.aliyun.com/pypi/simple…

Redis【B站面試題】

前言 2023-07-27 22:44:59 出自B站 灰灰的Java面試 Redis Redis為什么快? 1.純內存KV操作 Redis的操作都是基于內存的,CPU不是 Redis性能瓶頸,,Redis的瓶頸是機器內存和網絡帶寬。 在計算機的世界中,CPU的速度是遠大于內存的速…

Java技術深度解析:高級面試問題與精粹答案(二)

Java 面試問題及答案 1. 什么是Java的垃圾回收機制?它是如何工作的? 答案: Java的垃圾回收機制(Garbage Collection,GC)是Java運行時環境(JRE)中的一個功能,用于自動管…

[CocosCreator]Android的增加AndroidX的動態權限

歡迎喜歡或者從事CocosCreator開發的小伙伴請加入我的大家庭CocosCreator游戲開發Q群:26855530 1.首先增加你需要申請的權限,修改:AndroidManifest.xml: <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas…

深度學習之基于TensorFlow人臉表情識別

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景 人臉表情識別是計算機視覺領域的重要研究方向之一&#xff0c;它在人機交互、情感分析、安全監控等領…

代碼隨想錄35期Day48-Java

Day48題目 LeetCode121買股票的最佳時機1 核心思想:可以使用貪心,選擇左邊最小的和右邊最大的,也可以動態規劃,需要保存是否持有股票的狀態,dp[i][0]表示第i天,不持有股票,dp[i][1]表示第i天持有 class Solution {public int maxProfit(int[] prices) {int[][] dp new int[…

python中異步io簡單樣例

目錄 一、異步IO簡單說明 二、代碼樣例 一、異步IO簡單說明 當進行異步 IO 操作時&#xff0c;程序不會因為等待 IO 操作完成而阻塞&#xff0c;而是可以在等待過程中繼續執行其他任務&#xff0c;從而提高了程序的并發性能和響應速度。這是因為異步 IO 操作利用了操作系統底層…

Java 變量和作用域:理解變量的聲明、初始化及其作用域

在Java編程語言中&#xff0c;變量和作用域是兩個核心概念。理解變量的聲明、初始化以及它們的作用域對于編寫健壯且高效的代碼至關重要。 變量的聲明與初始化 變量的聲明 在Java中&#xff0c;變量的聲明指的是定義變量的名稱和類型。在Java中&#xff0c;變量聲明的一般語…

ESP32開發——關于ESP32TimerInterrupt庫的例程分析

最近在學習嵌入式開發的內容&#xff0c;正好有一個開發任務涉及到對于定時器中斷的使用&#xff0c;今天正好找到了這個相關的庫&#xff1a;ESP32TimerInterrupt ESP32TimerInterrupt庫的下載鏈接&#xff08;適用于Arduino IDE&#xff09; 進入到這個地址后直接下載該庫的…

ubuntu使用記錄——如何使用wireshark網絡抓包工具進行檢測速騰激光雷達的ip和端口號

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言wireshark網絡抓包工具1.wireshark的安裝2.wireshark的使用3.更改雷達ip 總結 前言 Wireshark是一款備受贊譽的開源網絡協議分析軟件&#xff0c;其功能之強大…

簡述MyBatis中#{}引用和${}引用的區別

各位大佬光臨寒舍&#xff0c;希望各位能賞臉給個三連&#xff0c;謝謝各位大佬了&#xff01;&#xff01;&#xff01; 目錄 1.有無預編譯 優點 缺點 2.SQL執行的快慢 3.能否被SQL注入 4.參數輸入方式 5.總結 1.有無預編譯 #{}是有預編譯的而${}是沒有預編譯的&…

LiveGBS流媒體平臺GB/T28181用戶手冊-服務器概覽:通道信息、負載信息、CPU使用、存儲使用、帶寬使用(Mbps)、內存使用

LiveGBS用戶手冊-服務器概覽&#xff1a;通道信息、負載信息、CPU使用、存儲使用、帶寬使用&#xff08;Mbps&#xff09;、內存使用 1、服務器概覽1.1、通道信息1.2、負載信息1.2.1、信息說明1.2.2、會話列表 1.3、CPU使用1.4、存儲使用1.5、帶寬使用&#xff08;Mbps&#xf…

15:00面試,15:08出來,面試問的有點變態。。。。

&#x1f345; 視頻學習&#xff1a;文末有免費的配套視頻可觀看 &#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 從小廠出來&#xff0c;沒想到在另一家公司又寄了。 到這家公司開始上班&#xff0c;加班是每天…

C語言查漏補缺學習【精簡版】

1.scanf函數 scanf&#xff08;"%d %d"&#xff09;//1 2 scanf("price%d %d") //price1 2 // 意思就是scanf函數中&#xff0c;格式是什么&#xff0c;就要對應的輸入什么&#xff0c;不然讀取不到輸入的變量2.常量&#xff1a;const int AMOUNT 100; …

github下載代碼

clone代碼 git clone https://<your_token>github.com//.git 設置URL git remote set-url origin https://<your_token>github.com//.git 設置github本地ip https://juejin.cn/post/7350880189836918820?searchId202405191828091DB64DD476DF0AEC7442

掌握Edge瀏覽器的使用技巧

導言&#xff1a; Edge瀏覽器是微軟推出的一款現代化、高效的網絡瀏覽器。它不僅提供了基本的瀏覽功能&#xff0c;還具備了許多強大的特性和技巧&#xff0c;可以幫助用戶更好地利用瀏覽器進行工作和娛樂。本文將介紹一些Edge瀏覽器的使用技巧&#xff0c;幫助讀者更好地掌握這…

阿里云數據庫 SelectDB 版全面商業化,開啟現代化實時數據倉庫的全新篇章

2024 年 5 月 21 日&#xff0c;由阿里云聯合飛輪科技共同舉辦的「阿里云數據庫 SelectDB 版商業化產品發布會」于線上召開。阿里巴巴集團副總裁、阿里云數據庫產品事業部負責人李飛飛宣布&#xff0c;阿里云數據庫 SelectDB 版在中國站及國際站全面發布&#xff0c;正式開啟商…

集合-1 數組ArrayListLinkedList

一.數組 1.什么是數組&#xff1f; 數組是一種用連續的內存空間存儲相同類型數據的線性數據結構。 2.為什么數組下標是從0開始&#xff1f; &#xff08;1&#xff09;數組根據下標查找元素是基于尋址公式&#xff1a;元素地址數組首地址索引i*數組存儲數據類型的大小 &am…