精品欧美激情精品一区,亚洲自拍的二区三区,亚洲综合精品一区二区,国产伦精品一区二区三区视频免费


學AI,好工作 就找北大青鳥
關注小青 聽課做題,輕松學習
周一至周日
4000-9696-28

大話設計模式之工廠模式

來源:北大青鳥總部 2023年02月16日 14:40

摘要: 無論是簡單工廠模式,工廠方法模式,還是抽象工廠模式,他們都屬于工廠模式,雖然在形式有些區別,但是最終目的都是為了解耦。

在程序猿世界里,能夠寫出優雅、可擴展、低耦合、甚至像詩一樣的代碼,是每個程序猿畢生的追求~

秉承這個人生的終極理想,猿小二入職一家新公司,開始慢慢熟悉公司的代碼,越來越覺得不對勁,這家公司的代碼寫的可真爛,各種耦合牽一發動全身,完全不是面試時老板說的公司的代碼都像詩一樣優雅,猿小二感覺自己上當了!

沒辦法,猿小二只能硬著頭皮繼續了,不過猿小二轉念一想,代碼這么多問題,不就是給我表現的機會嗎?猿小二心中竊喜,思考著如何用設計模式來重構現在的代碼,增加程序間的可擴展性并降低程序間的耦合度,猿小二想到最近正在研究的工廠模式,于是猿小二開始了他的改造之旅......



經過了一段時間的努力,猿小二終于完成了一部分代碼的改造;正當他在對自己的成就自信滿滿的時候,一些同事突然過來說改造之后的代碼雖然感覺很優雅(不明覺厲),但是他們卻看不懂,猿小二說,我來給大家講一下我的改造之旅吧,其實也不是那么順利的,于是猿小二又開始了他的分享之旅~~~


簡單工廠模式(靜態工廠模式)

最開始的時候,猿小二對一些代碼的改造使用了簡單工廠模式,簡單工廠就是有一個工廠類,根據傳入的參數不同創建不同的對象實例;比如說,有個生產汽車的工廠(CarFactory),可以生產各種不同品牌的汽車(AudiCar、BWMCar、AMGCar)



定義一個汽車的接口

/**
* 汽車接口 */
public interface Car {
// 汽車會跑
public void run();
}


定義各種品牌的汽車類,實現汽車接口

/**
* 奧迪汽車類
*/
public class AudiCar implements Car {
public void run() {
System.out.println("奧迪汽車...");
}
}
/**
* 寶馬汽車類
*/
public class BWMCar implements Car {
public void run() {
System.out.println("寶馬汽車...");
}
}


對于這些不同品牌的汽車我們就可以提供一個工廠類,來根據不同的品牌參數去生產不同的汽車

/**
* 汽車工廠
*/public class CarFactory {


// 生產不同品牌的汽車
public Car produce(String bank) {
if ("AudiCar".equals(bank)) {
return new AudiCar();
} else if ("BWMCar".equals(bank)) {
return new BWMCar();
}
return null;
}
}


有了工廠對象了,接下來就可以生產汽車了

/**
* 測試生產汽車
*/
public class CarTest {
public static void main(String[] args) {
// 創建汽車工廠
CarFactory carFactory = new CarFactory();
// 生產奧迪汽車
Car audi = carFactory.produce("Audi");
audi.run();
// 生產寶馬汽車
Car bwm = carFactory.produce("BWM");
bwm.run();
}
}


這樣以來的話,我們就可以不用關心具體汽車對象的生產過程,只需要根據傳遞的參數(汽車品牌)就可以創建需要的汽車品牌了。

不過還有一個問題,就是如果我們要生產其他品牌的汽車,比如:豐田汽車,就的去改工廠類CarFactory里代碼,如果是汽車品牌多了話,豈不是要經常修改,這種頻繁修改的代碼的行為,這顯然不符合開放-封閉原則,對于追求極致的猿小二來說,顯然是接受不了的,于是他有開始新一輪的改造。


工廠方法模式

這個時候,猿小二想到了工廠方法模式,不同于簡單工廠模式的是,工廠方法模式沒有使用統一的工廠去生產不同的汽車品牌,而是分別給不同的汽車品牌建設不同工廠,比如:要生產Audi汽車,就創建Audi的汽車工廠;這樣每一個汽車品牌都有自己獨立的汽車生產工廠。



首先,先抽取一個最頂層的汽車工廠接口

/**
* 汽車工廠
*/
public interface CarFactory {
// 生產汽車
public Car produce();
}


然后,讓不同的汽車品牌工廠都實現這個接口,比如:奧迪汽車工廠、寶馬汽車工廠、豐田汽車工廠。

/**
* 奧迪汽車工廠
*/
public class AudiCarFactory implements CarFactory {
// 負責生產奧迪汽車
public Car produce() {
return new AudiCar();
}
}


豐田汽車工廠

/**
* 豐田汽車廠
*/
public class TOYOTACarFactory implements CarFactory {
// 負責生產豐田汽車
public Car produce() {
return new TOYOTACar();
}
}


測試生產汽車

/**
* 汽車工廠方法測試
*/
public class CarFactoryMethodTest {
public static void main(String[] args) {
// 奧迪汽車廠生產奧迪汽車
CarFactory audiCarFactory = new AudiCarFactory();
Car audi = audiCarFactory.produce();
audi.run();
// 寶馬汽車廠生產寶馬汽車
CarFactory toyotaCarFactory = new TOYOTACarFactory();
Car toyota = toyotaCarFactory.produce();
toyota.run();
}
}


通過這種工廠方法模式,我們再也不用擔心增加汽車品牌而去修改汽車工廠的代碼了,只需要創建相應品牌的汽車工廠類就可以了,而且這種方式還符合了設計模式的開放-封閉原則,簡直是完美;雖然有可能隨著汽車品牌的增加,工廠類也不斷增加,一定程度上會增加系統的復雜度,但是相對于它帶來的好處還是可以接受的。

本來事情已經告一段落,猿小二可以稍微輕松下了,沒想到老板說又有新的需求了,這些汽車廠要涉足汽車發動機領域,想要自己生產汽車發動機,這可難壞了猿小二,本來按照原來的思路,可以在創建發動機的工廠類,但是考慮到制造成本(發動機和組裝在同一個工廠生產),準備對原來的汽車工廠進行改造。


抽象工廠模式

為了滿足新的需求,需要在對原來的工廠進行改造,增加生產發動機的方法,這種方式就涉及到另外一種抽象工廠模式,在抽象工廠模式中,每一個具體工廠都提供了多個工廠方法用于產生多種不同類型的對象,比如,汽車工廠既生產汽車,也生產汽車發動機,于是猿小二開始新一輪的改造。



首先,我們先定義抽象工廠類,它既可以生產汽車,也可以生產汽車發動機

/**
* 抽象工廠
*/
public interface CarAbstractFactory {
// 生產汽車
public Car produce();


// 生產發動機
public Engine createEngine();
}


奧迪汽車工廠類實現這個抽象接口,生產奧迪汽車和奧迪的發動機

/**
* 奧迪汽車工廠
*/
public class AudiCarFactory implements CarAbstractFactory {
// 負責生產奧迪汽車
public Car produce() {
return new AudiCar();
}
// 生產奧迪發動機
public Engine create() {
return new AudiEngie();
}
}


這樣我們就可以看到奧迪汽車廠就可以生產自己品牌的汽車和發動機,其他品牌也可以生產各自的汽車和發動機

/**
* 抽象工廠測試
*/
public class AbstractFactoryTest {
public static void main(String[] args) {
// 奧迪汽車廠
CarAbstractFactory audiCarFactory = new AudiCarFactory();
// 生產奧迪汽車
Car produce = audiCarFactory.produce();
produce.run();
// 生產奧迪汽車發動機
Engine audiengine = audiCarFactory.createEngine();
audiengine.createEngine();
}
}


從這里我們可以看出其實抽象工廠模式是一個工廠可以生產多個產品類,也就是一系列相互關聯的產品,比如:汽車和發動機。

其實,無論是簡單工廠模式,工廠方法模式,還是抽象工廠模式,他們都屬于工廠模式,雖然在形式有些區別,但是最終目的都是為了解耦。在使用時,我們不必去在意這個模式到底工廠方法模式還是抽象工廠模式,因為通常情況下是結合使用;經常你會發現,明明使用的工廠方法模式,當新需求來臨,稍加修改,加入了一個新方法后,由于類中的產品構成了不同等級結構中的產品族,它就變成抽象工廠模式了;而對于抽象工廠模式,當減少一個方法使的提供的產品不再構成產品族之后,它就演變成了工廠方法模式;所以,在使用工廠模式時,只需要關心是不是達到我們的業務需求,并且最大限度降低系統間的耦合度。


熱門班型時間
人工智能就業班 即將爆滿
AI應用線上班 即將爆滿
UI設計全能班 即將爆滿
數據分析綜合班 即將爆滿
軟件開發全能班 爆滿開班
網絡安全運營班 爆滿開班
報名優惠
免費試聽
課程資料
官方微信
返回頂部
培訓課程 熱門話題 站內鏈接
精品欧美激情精品一区,亚洲自拍的二区三区,亚洲综合精品一区二区,国产伦精品一区二区三区视频免费
美女精品国产| 欧美成人a视频| 久久久精品2019中文字幕之3| 欧美国产精品中文字幕| 亚洲亚洲精品在线观看| 国产精品夜夜嗨| 久久99国产精品| 欧美色倩网站大全免费| 中文子幕无线码一区tr| 日本欧美一区二区在线观看| 99久久综合色| 午夜一区二区三区| 精品裸体舞一区二区三区| 亚洲一区二区五区| kk眼镜猥琐国模调教系列一区二区| 欧美中文娱乐网| 欧美一级精品大片| 洋洋成人永久网站入口| 成人性生交大片免费| 五月天色一区| 久久久777精品电影网影网| 日日骚欧美日韩| 91传媒视频在线观看| 欧洲中文字幕精品| 国产精品久久二区二区| 国产一区二区三区国产| 久久久久久精| 欧美成人精品1314www| 性做久久久久久久免费看| 91视频com| 欧美无砖专区一中文字| 亚洲婷婷在线视频| 成人性生交大片免费看在线播放| 日韩亚洲一区在线播放| 久久久久久久久久久久电影| 免费av网站大全久久| 黄色国产精品一区二区三区| 欧美一区二区三区电影| 午夜电影一区二区| 国产精品免费一区二区三区| 337p亚洲精品色噜噜噜| 亚洲成人一二三| 国产精品久久7| 欧美一区二区在线观看| 亚洲.国产.中文慕字在线| 国产精品9999久久久久仙踪林| 欧美日韩高清一区二区| 亚洲高清免费视频| 国产精品日韩高清| 日韩午夜在线播放| 免费成人av资源网| 日韩jizzz| 欧美—级在线免费片| 国产不卡视频在线观看| 色呦呦国产精品| 亚洲蜜臀av乱码久久精品蜜桃| 99久久婷婷国产综合精品电影 | 日韩欧美亚洲国产另类| 免费欧美在线视频| 日本一区高清在线视频| 国产精品欧美一级免费| www.亚洲色图| 欧美肥大bbwbbw高潮| 日韩经典一区二区| 免费久久久一本精品久久区| 久久精品一区八戒影视| 国产成人自拍网| 欧美性高清videossexo| 午夜欧美2019年伦理| 欧美国产综合视频| 亚洲国产精品二十页| jlzzjlzz欧美大全| 在线播放国产精品二区一二区四区| 日韩精品电影一区亚洲| 日本一区免费| 亚洲男人的天堂av| 国产精品区一区| 国产人伦精品一区二区| 不卡在线视频中文字幕| 91麻豆精品91久久久久久清纯 | 色综合久久久久久久久久久| 一区二区三区不卡在线观看| 精品欧美一区二区久久久伦| 国产片一区二区| 99国产精品久久久| 精品国产污网站| 丁香婷婷综合激情五月色| 欧美久久一区二区| 老司机免费视频一区二区三区| 亚洲一区三区| 午夜影院久久久| 午夜精品区一区二区三| 亚洲在线观看免费| 日本一区二区视频| 樱花影视一区二区| 欧美日韩高清在线一区| 亚洲女性喷水在线观看一区| 久久久久久一区| 亚洲欧美色一区| 麻豆av一区二区| 亚洲久草在线视频| 欧美高清一区二区| 亚洲一区二区三区影院| 色女人综合av| 亚洲chinese男男1069| 在线观看成人av电影| 午夜成人免费视频| 色综合av在线| 另类小说欧美激情| 欧美精品自拍偷拍动漫精品| 国产一区二区伦理| 欧美一级黄色片| 成人av电影在线播放| 精品国产一区久久| 91久久精品www人人做人人爽 | 99久热re在线精品996热视频| 久久九九99视频| 国产美女精品久久久| 亚洲视频中文字幕| 日产国产精品精品a∨ | 国产日韩欧美麻豆| 国产欧美一区二区三区另类精品 | 日本亚洲三级在线| 色婷婷激情一区二区三区| 久久www免费人成看片高清| 欧美挠脚心视频网站| 国产成人免费高清| 久久香蕉国产线看观看99| 国产精品对白一区二区三区| **性色生活片久久毛片| 日本精品一区二区| 日本在线不卡一区| 欧美福利视频一区| 99久久国产综合色|国产精品| 国产日韩精品一区二区三区| 精品免费一区二区三区蜜桃| 亚洲国产成人精品视频| 欧美综合欧美视频| 国产iv一区二区三区| 久久亚洲精精品中文字幕早川悠里| 国产精品免费区二区三区观看| 亚洲精品va在线观看| 一本一道久久a久久精品| 国产综合久久久久久鬼色| 欧美www视频| 精品久久精品久久| 亚洲mv在线观看| 8x8x8国产精品| 成人av男人的天堂| 亚洲图片欧美视频| 欧美乱妇15p| 99久久久国产精品免费蜜臀| 国产精品美女久久久久aⅴ| 色噜噜狠狠色综合网| 经典三级一区二区| 久久影院电视剧免费观看| 麻豆91蜜桃| 另类小说一区二区三区| 精品盗摄一区二区三区| 久久这里精品国产99丫e6| 日本不卡不码高清免费观看| 欧美不卡一二三| 蜜桃传媒视频麻豆第一区免费观看| 日韩主播视频在线| 欧美sm美女调教| 明星裸体视频一区二区| 精品在线观看视频| 久久精品亚洲精品国产欧美kt∨| 青青草成人激情在线| 韩国精品一区二区| 国产精品入口麻豆九色| 中文字幕av日韩精品| 成人黄色电影在线 | 国产主播一区二区三区| 国产欧美一区二区精品性色| 亚洲日本一区二区三区在线不卡 | 天堂影院一区二区| 日韩欧美一二三| 欧洲一区二区日韩在线视频观看免费 | 亚洲国产精品精华液ab| 中文字幕人成一区| 99久精品国产| 天堂资源在线中文精品| 337p日本欧洲亚洲大胆色噜噜| 色999日韩自偷自拍美女| 夫妻av一区二区| 一区二区视频在线| 日韩三级中文字幕| 天堂va久久久噜噜噜久久va| 成人免费的视频| 亚洲成人av中文| 久久久不卡网国产精品一区| 综合久久国产| 91视频婷婷| 蜜臀久久99精品久久久久宅男| 国产婷婷一区二区| 欧美性三三影院| 久久手机视频| 国产99久久精品| 亚洲成a人片综合在线|