日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

创建型模式:抽象工厂

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建型模式:抽象工厂 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

個人博客原文:
創建型模式:抽象工廠

五大創建型模式之三:抽象工廠。

簡介

姓名 :抽象工廠

英文名 :Abstract Factory Pattern

價值觀 :不管你有多少產品,給我就是了

個人介紹

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
為創建一組相關或相互依賴的對象提供一個接口,而且無須指定它們的具體類。
(來自《設計模式之禪》)

今天講的是抽象工廠模式,小伙伴可能有疑問,抽象工廠和工廠方法之間都有工廠,那肯定是有什么聯系的,具體是什么關系呢?簡單的說:工廠方法是在解決一個產品多個層級方面的事情;而抽象工廠致力于解決多個產品多個層級方面的事情。舉個例子:汽車是由很多零件組成的,比如引擎、輪胎、方向盤等等。現在如果我們是輪胎生產方,要生產寶馬輪胎和奔馳輪胎,要用工廠方法還是抽象工廠實現呢?答案是:工廠方法。輪胎是一個產品,寶馬輪胎和奔馳輪胎是 2 個不同層級的輪胎,所以用工廠方法解決就足夠。假如現在我們是汽車生產方,要生產寶馬汽車和奔馳汽車,汽車又包含輪胎和方向盤等等,要用哪個來實現?既然是上面的是工廠方法,那這個就用抽象工廠,因為這涉及到多個產品(輪胎、方向盤等等)和 2 個層級(寶馬和奔馳)。這里還沒有講抽象工廠的概念就說了工廠方法和抽象方法的區別,是不是有點陌生?嗯,先記住這個概念,分清楚兩者的區別。在不同場景使用不同的設計模式。

上面定義中:為創建一組相關或相互依賴的對象提供一個接口。這樣子理解這句話,比如上面說的輪胎和方向盤,寶馬汽車用的輪胎和方向盤需要都是寶馬品牌的,也就是說在安裝寶馬汽車的輪胎和方向盤的時候,得用寶馬生產的輪胎和方向盤,重要的一點是:輪胎和方向盤是互相依賴的,不能在寶馬汽車上安裝奔馳輪胎和寶馬方向盤,因為有這個依賴關系,所以我們需要提供一個額外的接口,來保證寶馬汽車使用的輪胎和方向盤都是寶馬生產的。這就是抽象工廠干的事情。

你要的故事

上面用汽車安裝輪胎和方向盤的例子,那這里為了讓大家能深入理解,就不用其他例子了。在一個設計模式講解的過程中,我覺得用一個案例來講解可以減少讀者的閱讀理解成本,為了寫設計模式這一系列文章,看了不少設計模式方面的書籍,有些書籍在講解一個設計模式的時候,用了不止一個例子,讀完之后印象不是很深刻。這個系列寫完之后,想要的效果是:不需要記住設計模式的定義,把這些故事以及故事對應是講哪個設計模式都記住了,就真正掌握了這些內容了。

public class AbstractFactoryTest {public static void main(String[] args) {// 寶馬員工安裝輪胎和方向盤AbstractCarFactory bmwCarFacatory = new BMWCarFactory();bmwCarFacatory.installWheel();bmwCarFacatory.installSteeringWheel();// 奔馳員工安裝輪胎和方向盤AbstractCarFactory mercedesCarFacatory = new MercedesCarFacatory();mercedesCarFacatory.installWheel();mercedesCarFacatory.installSteeringWheel();}}/*** 汽車抽象工廠*/ interface AbstractCarFactory {void installWheel();void installSteeringWheel();}/*** 寶馬工廠*/ class BMWCarFactory implements AbstractCarFactory {@Overridepublic void installWheel() {WheelFacatory wheelFacatory = new BMWWheelFacatory();String wheel = wheelFacatory.createWheel();System.out.println("安裝輪胎:" + wheel);}@Overridepublic void installSteeringWheel() {SteeringWheelFacatory steeringWheelFacatory = new BMWSteeringWheelFacatory();String steeringWheel = steeringWheelFacatory.createSteeringWheel();System.out.println("安裝方向盤:" + steeringWheel);} }/*** 奔馳工廠*/ class MercedesCarFacatory implements AbstractCarFactory {@Overridepublic void installWheel() {WheelFacatory wheelFacatory = new MercedesWheelFacatory();String wheel = wheelFacatory.createWheel();System.out.println("安裝輪胎:" + wheel);}@Overridepublic void installSteeringWheel() {SteeringWheelFacatory steeringWheelFacatory = new MercedesSteeringWheelFacatory();String steeringWheel = steeringWheelFacatory.createSteeringWheel();System.out.println("安裝方向盤:" + steeringWheel);} }/*** 輪胎工廠*/ interface WheelFacatory {String createWheel();}/*** 寶馬輪胎工廠*/ class BMWWheelFacatory implements WheelFacatory {@Overridepublic String createWheel() {System.out.println("寶馬輪胎工廠生產輪胎");return "寶馬輪胎";} }/*** 奔馳輪胎工廠*/ class MercedesWheelFacatory implements WheelFacatory {@Overridepublic String createWheel() {System.out.println("奔馳輪胎工廠生產輪胎");return "奔馳輪胎";} }/*** 方向盤工廠*/ interface SteeringWheelFacatory {String createSteeringWheel();}/*** 寶馬方向盤工廠*/ class BMWSteeringWheelFacatory implements SteeringWheelFacatory {@Overridepublic String createSteeringWheel() {System.out.println("寶馬方向盤工廠生產方向盤");return "寶馬方向盤";} }/*** 奔馳方向盤工廠*/ class MercedesSteeringWheelFacatory implements SteeringWheelFacatory {@Overridepublic String createSteeringWheel() {System.out.println("奔馳方向盤工廠生產方向盤");return "奔馳方向盤";} }

代碼:

AbstractFactoryTest.java

還是和以往一樣,思維開拓一下,這里列舉的是給汽車安裝輪胎和方向盤,汽車不止這些,如果要加個安裝引擎呢?要怎么實現?這里我就不寫出來了,讓小伙伴嘗試一下,寫出來了就理解抽象模式這個設計模式啦。

總結

簡單工廠、工廠方法、抽象工廠這幾個工廠相關的設計模式的基本內容都講完了,這幾個模式都是為了解耦,為了可擴展。這里要著重說一下,三者之間沒有好壞之分,只有在具體的場景才能發揮它們各自的優勢。在單產品多層級,層級數量不多的情況下,可以使用簡單工廠,層級多且需要支持擴展,可以使用工廠方法;在多產品多層級,可以使用抽象工廠。

參考資料:《大話設計模式》、《Java設計模式》、《設計模式之禪》、《研磨設計模式》、《Head First 設計模式》

推薦閱讀:
創建型模式:單例模式
創建型模式:工廠方法

希望文章對您有所幫助,設計模式系列會持續更新,感興趣的同學可以關注公眾號,第一時間獲取文章推送閱讀,也可以一起交流,交個朋友。

公眾號之設計模式系列文章

轉載于:https://www.cnblogs.com/liebrother/p/10296253.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的创建型模式:抽象工厂的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。