java設計模式(四)——抽象工廠模式

一、模式介紹

改善在工廠方法模式中,擴展時新增產品類、工廠類,導致項目中類巨多的場面,減少系統的維護成本,且一個工廠可以生成多種產品,而不是同一種的產品,比如一個工廠既可以生產鞋子又可以衣服,而不是只能生產鞋子。

二、工廠方法模式

1、實現步驟

第一步: 定義產品的抽象基類,如鞋子(Shoes.class),衣服(Clothe.class)
// 1、定義鞋 產品抽象基類
abstract class Shoes {// 展示logopublic abstract void showLogo();
}
// 1、定義衣服 產品抽象基類
abstract class Clothe {// 展示logopublic abstract void showLogo();
}
第二步:定義具體產品類,繼承產品抽象基類,如飛躍牌鞋子(FeiYueShoes.class),飛躍牌衣服(FeiYueClothe.class),回力牌鞋子(HuiLiShoes.class),回力牌衣服(HuiLiClothe.class)
//2.定義具體品牌的鞋類,繼承鞋抽象基類
public class FeiYueShoes extends Shoes {@Overridepublic void showLogo() {System.out.println("這是飛躍鞋");}
}
//2.定義具體品牌的衣服,繼承鞋抽象基類
public class FeiYueClothe extends Clothe {@Overridepublic void showLogo() {System.out.println("這是飛躍衣服");}
}
//2.定義具體品牌的鞋類,繼承鞋抽象基類
public class HuiLiShoes extends Shoes {@Overridepublic void showLogo() {System.out.println("這是回力鞋");}
}
//2.定義具體品牌的衣服,繼承衣服抽象基類
public class HuiLiClothe extends Clothe {@Overridepublic void showLogo() {System.out.println("這是回力衣服");}
}
第三步:定義抽象工廠接口(AbstractFactory.class,說明工廠具體生產什么產品,鞋子,衣服,即抽象工廠生產抽象產品
//3 定義抽象工廠接口
interface AbstractFactory {// 生產鞋子Shoes produceShoes();// 生產衣服Clothe produceClothe();
}
第四步:定義生產具體產品的具體工廠類,實現抽象工廠類方法,如飛躍工廠(FeiYueFactory.class)、回力工廠(HuiLiFactory.class
// 4 定義生產飛躍產品的的具體工廠類
public class FeiYueFactory implements AbstractFactory {@Overridepublic Shoes produceShoes() {return new FeiYueShoes();}@Overridepublic Clothe produceClothe() {return new FeiYueClothe();}
}
// 4 定義生產回力產品的的具體工廠類
public class HuiLiFactory implements AbstractFactory {@Overridepublic Shoes produceShoes() {return new HuiLiShoes();}@Overridepublic Clothe produceClothe() {return new HuiLiClothe();}
}
第五步:調用抽象工廠方法(AbstractFactoryExample.class) (先實例化具體工廠類,然后調用方法生成具體產品(實例化具體產品類),最后調用產品方法、屬性)
// 5 調用抽象工廠方法
public class AbstractFactoryExample {public static void main(String[] args) {//飛躍工廠FeiYueFactory feiYueFactory = new FeiYueFactory();// 生產飛躍鞋子feiYueFactory.produceShoes().showLogo();// 生產飛躍衣服feiYueFactory.produceClothe().showLogo();//回力工廠HuiLiFactory huiLiFactory = new HuiLiFactory();// 生產回力鞋子huiLiFactory.produceShoes().showLogo();// 生產回力衣服huiLiFactory.produceClothe().showLogo();}
}

2、總結

 理解抽象工廠模式的核心關鍵在于理解品牌家族的概念,簡單工廠方法與工廠方法創建工廠的著眼于某類具體的產品,某個工廠與某個產品對應,而抽象工廠這是某個工廠與家族的產品對應,這個工廠可以生產這個品牌家族的一系列產品。如果新增品牌。則定義具體產品類,定義具體工廠類,然后調用抽象工廠方法即可。

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

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

相關文章

解決數據庫PGSQL,在Mybatis中創建臨時表報錯TODO IDENTIFIER,連接池用的Druid。更換最新版本Druid仍然報錯解決

Druid版本1.1.9報錯Caused by: java.sql.SQLException: sql injection violation, syntax error: TODO IDENTIFIER : CREATE TEMPORARY TABLE temp_ball_classify (id int8 NOT NULL,create_time TIMESTAMP,create_by VARCHAR,classify_name VARCHAR) 代碼如下: 測…

四川蔚瀾時代電子商務有限公司打造抖音電商服務新高地

在數字化浪潮洶涌澎湃的今天,電商行業以其獨特的魅力和強大的市場潛力,成為了推動經濟增長的新引擎。四川蔚瀾時代電子商務有限公司,作為這個領域的佼佼者,正以其專業的服務、創新的理念和卓越的實力,引領抖音電商服務…

用AI,每天創作200+優質內容,2分鐘教會你操作!

前段時間發布了這篇“尋找爆款文案及標題的9大渠道,直接搬運都能搞流量!”,里面我講到如何尋找爆款標題。最近不少朋友問我,如何創作這個標題相關的內容。 多數平臺都有風控規則,有些平臺內容也會有字數要求。為了讓大…

SpringBoot 項目整合 MyBatis 框架,附帶測試示例

文章目錄 一、創建 SpringBoot 項目二、添加 MyBatis 依賴三、項目結構和數據庫表結構四、項目代碼1、application.yml2、TestController3、TbUser4、TbUserMapper5、TestServiceImpl6、TestService7、TestApplication8、TbUserMapper.xml9、MyBatisTest 五、瀏覽器測試結果六、…

JavaScript實現時鐘計時

會動的時鐘 1.目標 2.分析 1.最開始頁面不顯示時間,有兩個按鈕 開始 暫停。開始按鈕是可以點擊的,暫停按鈕不能點擊 2.當點擊開始按鈕后,設置開始按鈕不可用,暫停按鈕可用。然后將當前系統時間放到按鈕上面。每隔1秒中更新一下…

TransMIL:基于Transformer的多實例學習

MIL是弱監督分類問題的有力工具。然而,目前的MIL方法通常基于iid假設,忽略了不同實例之間的相關性。為了解決這個問題,作者提出了一個新的框架,稱為相關性MIL,并提供了收斂性的證明。基于此框架,還設計了一…

3.js - 反射率(reflectivity) 、折射率(ior)

沒啥太大的感覺 反射率 reflectivity 概念 反射率:指的是,材質表面反射光線的能力反射率,用于控制材質對環境光,或光源的反射程度反射率越高,材質表面反射的光線越多,看起來就越光亮使用 適用于&#xff0…

【OCPP】ocpp1.6協議第5.1章節Cancel Reservation的介紹及翻譯

目錄 5.1 取消預約Cancel Reservation-概述 Cancel Reservation CancelReservation.req 請求消息 CancelReservation.conf 確認消息 取消預定的流程 應用場景 示例消息 CancelReservation.req 示例 CancelReservation.conf 示例 總結 5.1 取消預約Cancel Reservation…

VScode 常用插件

基礎開發插件 Chinese (Simplified)(簡體中文語言包):這是適用于VS Code的中文(簡體)語言包,適用于英語不太流利的用戶。Auto Rename Tag:這個插件可以同步修改HTML/XML標簽,當用戶修…

【PYG】Cora數據集分類任務計算損失,cross_entropy為什么不能直接替換成mse_loss

cross_entropy計算誤差方式,輸入向量z為[1,2,3],預測y為[1],選擇數為2,計算出一大坨e的式子為3.405,再用-23.405計算得到1.405MSE計算誤差方式,輸入z為[1,2,3],預測向量應該是[1,0,0]&#xff0…

Dify入門指南

一.Dify介紹 生成式 AI 應用創新引擎,開源的 LLM 應用開發平臺。提供從 Agent 構建到 AI workflow 編排、RAG 檢索、模型管理等能力,輕松構建和運營生成式 AI 原生應用,比 LangChain 更易用。一個平臺,接入全球大型語言模型。不同…

CesiumJS【Basic】- #050 繪制掃描線(Primitive方式)

文章目錄 繪制掃描線(Primitive方式)- 需要自定義著色器1 目標2 代碼2.1 main.ts繪制掃描線(Primitive方式)- 需要自定義著色器 1 目標 使用Primitive方式繪制掃描線 2 代碼 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer(cesiumConta…

自我反思與暑假及大三上學期規劃

又要放暑假了,依稀記得上個暑假一邊練車,一邊試圖拿捏C語言,第一次感覺暑假也可以如此忙碌。但是開學以后,我并沒有把重心放在期望自己應該做的事情上,更多的時間花費在了處理學院的相關事務。現在看來,大二…

《昇思 25 天學習打卡營第 9 天 | FCN 圖像語義分割 》

活動地址:https://xihe.mindspore.cn/events/mindspore-training-camp 簽名:Sam9029 這一章節 出現了一個 深度學習 中經常出現的概念 全卷積網絡(Fully Convolutional Networks) : 官話:FCN 主要用于圖像分割領域&…

德璞資本:橋水公司如何利用AI實現投資決策的精準提升?

摘要: 在金融科技的浪潮中,橋水公司推出了一只依靠機器學習決策的創新基金,吸引了大量投資者的關注。本文將深入探討該基金的背景、AI技術的應用、對橋水公司轉型的影響,以及未來發展的前景。 新基金背景:橋水公司的創…

2024年7月2日 (周二) 葉子游戲新聞

老板鍵工具來喚去: 它可以為常用程序自定義快捷鍵,實現一鍵喚起、一鍵隱藏的 Windows 工具,并且支持窗口動態綁定快捷鍵(無需設置自動實現)。 卸載工具 HiBitUninstaller: Windows上的軟件卸載工具 經典名作30周年新篇《恐怖驚魂夜…

MyBatis入門案例

實施前的準備工作: 1.準備數據庫表2.創建一個新的springboot工程,選擇引入對應的起步依賴(mybatis、mysql驅動、lombok)3.在application.properties文件中引入數據庫連接信息4.創建對應的實體類Emp(實體類屬性采用駝峰…

throw 和return的區別,A函數里面執行B函數 B函數異常后 不再執行A函數

function aFun() {try {bFun();console.log(22222222222);} catch (e) {// 如果bFun中拋出異常,中止aFun的執行console.log(e.message);} }function bFun() {let a 1, b 1;if (a b) {throw new Error(Stopped by bFun); // 拋出異常,停止aFun}// bFun…

python3遞歸目錄刪除N天前的文件(帶有日志記錄)

本來想用linux find去處理,為了裝逼,寫了py玩玩,刪除2w個文件總共用了2毫秒。因為這個腳本有記錄刪除時間,你可以看到開始時間和最后刪除的時間。由于只用了2毫秒,把我嚇了一跳以為刪錯文件了!! #!/usr/bin/env python3 # -*- encoding: utf-8 -*-@File : del_N…

補瀏覽器環境

一,導言 // global是node中的關鍵字(全局變量),在node中調用其中的元素時,可以直接引用,不用加global前綴,和瀏覽器中的window類似;在瀏覽器中可能會使用window前綴:win…