工廠模式

1.首先,抽象出來工廠生產(chǎn)出來的產(chǎn)品模板接口:

package com.gupaoedu.vip.factory;

//產(chǎn)品接口

//汽車需要滿足一定的標(biāo)準(zhǔn)

public interface Car {

//規(guī)定汽車的品牌

String getName();

}

2.定義工廠中可以生產(chǎn)的實(shí)體:

package com.gupaoedu.vip.factory;

public class Audi implements Car{

@Override

public String getName() {

return "Audi";

}

}

package com.gupaoedu.vip.factory;

public class Benz implements Car{

@Override

public String getName() {

return "Benz";

}

}

package com.gupaoedu.vip.factory;

public class Bmw implements Car{

@Override

public String getName() {

return "BMW";

}

}

3.定義一個(gè)工廠便脊,該工廠根據(jù)你想要的實(shí)體名稱子房,生產(chǎn)出不同的實(shí)體:

package com.gupaoedu.vip.factory.simple;

import com.gupaoedu.vip.factory.Audi;

import com.gupaoedu.vip.factory.Benz;

import com.gupaoedu.vip.factory.Bmw;

import com.gupaoedu.vip.factory.Car;

//對于這個(gè)工廠來說(太強(qiáng)大了)

//為什么?

//這個(gè)工廠啥都能干(不符合現(xiàn)實(shí))

//編碼也是一種藝術(shù)(融匯貫通),藝術(shù)來源于生活就轧,回歸到生活的

public class SimpleFactory {

//實(shí)現(xiàn)統(tǒng)一管理、專業(yè)化管理

//如果沒有工廠模式田度,小作坊妒御,沒有執(zhí)行標(biāo)準(zhǔn)的

//如果買到三無產(chǎn)品(沒有標(biāo)準(zhǔn))

//衛(wèi)生監(jiān)督局工作難度會大大減輕

//中國制造(按人家的標(biāo)準(zhǔn)執(zhí)行)

//中國制造向中國創(chuàng)造改變(技術(shù)不是問題了,問題是什么镇饺?思維能力)

//碼農(nóng)就是執(zhí)行標(biāo)準(zhǔn)的人

//系統(tǒng)架構(gòu)師乎莉,就是制定標(biāo)準(zhǔn)的人

//不只做一個(gè)技術(shù)者,更要做一個(gè)思考者

public Car getCar(String name){

if("BMW".equalsIgnoreCase(name)){

//Spring中的工廠模式

//Bean

//BeanFactory(生成Bean)

//單例的Bean

//被代理過的Bean

//最原始的Bean(原型)

//List類型的Bean

//作用域不同的Bean

//getBean

//非常的紊亂奸笤,維護(hù)困難

//解耦(松耦合開發(fā))

return new Bmw();

}else if("Benz".equalsIgnoreCase(name)){

return new Benz();

}else if("Audi".equalsIgnoreCase(name)){

return new Audi();

}else{

System.out.println("這個(gè)產(chǎn)品產(chǎn)不出來");

return null;

}

}

}

4.測試類:

package com.gupaoedu.vip.factory.simple;

import com.gupaoedu.vip.factory.Car;

public class SimpleFactoryTest {

public static void main(String[] args) {

//這邊就是我們的消費(fèi)者

Car car = new SimpleFactory().getCar("Audi");

System.out.println(car.getName());

}

}

缺點(diǎn):當(dāng)生產(chǎn)的實(shí)體很多時(shí)惋啃,需要寫大量的if-else。

改進(jìn):

當(dāng)實(shí)體類過多時(shí)监右,就不能一個(gè)工廠生產(chǎn)全部實(shí)體了边灭,那就多建幾個(gè)工廠,分別生產(chǎn)不同的產(chǎn)品健盒,比如:面粉在面粉廠中生產(chǎn)绒瘦,水杯在水杯廠中生產(chǎn)称簿。

1.定義工廠的接口

package com.gupaoedu.vip.factory.func;

import com.gupaoedu.vip.factory.Car;

//工廠接口,就定義了所有工廠的執(zhí)行標(biāo)準(zhǔn)

public interface Factory {

//符合汽車上路標(biāo)準(zhǔn)

//尾氣排放標(biāo)準(zhǔn)

//電子設(shè)備安全系數(shù)

//必須配備安全帶惰帽、安全氣囊

//輪胎的耐磨程度

Car getCar();

}


2.建立多個(gè)工廠:

package com.gupaoedu.vip.factory.func;

import com.gupaoedu.vip.factory.Audi;

import com.gupaoedu.vip.factory.Car;

public class AudiFactory implements Factory {

@Override

public Car getCar() {

return new Audi();

}

}

package com.gupaoedu.vip.factory.func;

import com.gupaoedu.vip.factory.Benz;

import com.gupaoedu.vip.factory.Car;

public class BenzFactory implements Factory {

@Override

public Car getCar() {

return new Benz();

}

}

package com.gupaoedu.vip.factory.func;

import com.gupaoedu.vip.factory.Bmw;

import com.gupaoedu.vip.factory.Car;

public class BmwFactory implements Factory {

@Override

public Car getCar() {

return new Bmw();

}

}

3.測試類:

package com.gupaoedu.vip.factory.func;

public class FactoryTest {

public static void main(String[] args) {

//工廠方法模式

//各個(gè)產(chǎn)品的生產(chǎn)商憨降,都擁有各自的工廠

//生產(chǎn)工藝,生成的高科技程度都是不一樣的

Factory factory = new AudiFactory();

System.out.println(factory.getCar());

//需要用戶關(guān)心该酗,這個(gè)產(chǎn)品的生產(chǎn)商

factory = new BmwFactory();

System.out.println(factory.getCar());

//增加的代碼的使用復(fù)雜度

//抽象工廠模式

}

}

缺點(diǎn):雖然對工廠進(jìn)行了細(xì)分授药,但是,用戶需要某個(gè)實(shí)體時(shí)呜魄,需要建一個(gè)對應(yīng)的工廠悔叽,比較麻煩,怎么讓用戶接觸不到工廠耕赘,只需要告訴工廠類需要什么骄蝇,工廠類只管生產(chǎn)就行了?

引用抽象工廠:

1)定義一個(gè)抽象工廠操骡,定義一個(gè)默認(rèn)抽象方法protected abstract Car getCar();九火,只要是工廠,就得實(shí)現(xiàn)該方法册招,寶馬工廠岔激,通過重寫該方法,生產(chǎn)寶馬是掰。不同的工廠通過重寫該方法虑鼎,可以生產(chǎn)出不同的實(shí)體,默認(rèn)工廠也是一樣:

package com.gupaoedu.vip.factory.abstr;

import com.gupaoedu.vip.factory.Car;

public abstract class AbstractFactory {

protected abstract Car getCar();

//這段代碼就是動(dòng)態(tài)配置的功能

//固定模式的委派

public Car getCar(String name){

if("BMW".equalsIgnoreCase(name)){

return new BmwFactory().getCar();

}else if("Benz".equalsIgnoreCase(name)){

return new BenzFactory().getCar();

}else if("Audi".equalsIgnoreCase(name)){

return new AudiFactory().getCar();

}else{

System.out.println("這個(gè)產(chǎn)品產(chǎn)不出來");

return null;

}

}

}

2)定義一個(gè)默認(rèn)工廠方法:

package com.gupaoedu.vip.factory.abstr;

import com.gupaoedu.vip.factory.Car;

public class DefaultFactory extends AbstractFactory {

private AudiFactory defaultFactory = new AudiFactory();

public Car getCar() {

return defaultFactory.getCar();

}

}

3)構(gòu)建各種工廠:

package com.gupaoedu.vip.factory.abstr;

import com.gupaoedu.vip.factory.Audi;

import com.gupaoedu.vip.factory.Car;

//具體的業(yè)務(wù)邏輯封裝

public class AudiFactory extends AbstractFactory {

@Override

public Car getCar() {

return new Audi();

}

}

package com.gupaoedu.vip.factory.abstr;

import com.gupaoedu.vip.factory.Benz;

import com.gupaoedu.vip.factory.Car;

public class BenzFactory extends AbstractFactory {

@Override

public Car getCar() {

return new Benz();

}

}

package com.gupaoedu.vip.factory.abstr;

import com.gupaoedu.vip.factory.Bmw;

import com.gupaoedu.vip.factory.Car;

public class BmwFactory extends AbstractFactory {

@Override

public Car getCar() {

return new Bmw();

}

}

4)測試類:

package com.gupaoedu.vip.factory.abstr;

public class AbstractFactoryTest {

public static void main(String[] args) {

DefaultFactory factory = new DefaultFactory();

System.out.println(factory.getCar("Benz"));

//設(shè)計(jì)模式的經(jīng)典之處键痛,就在于炫彩,解決了編寫代碼的人和調(diào)用代碼的人雙方的痛處

//解放我們的雙手

}

}

使用默認(rèn)工廠進(jìn)行生產(chǎn)實(shí)體,如果不傳參數(shù)絮短,使用默認(rèn)工廠生產(chǎn)實(shí)體江兢,如果傳參數(shù),使用父類抽象工廠生產(chǎn)實(shí)體丁频。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杉允,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子席里,更是在濱河造成了極大的恐慌叔磷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奖磁,死亡現(xiàn)場離奇詭異改基,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)咖为,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門寥裂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嵌洼,“玉大人,你說我怎么就攤上這事封恰÷檠” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵诺舔,是天一觀的道長鳖昌。 經(jīng)常有香客問我,道長低飒,這世上最難降的妖魔是什么许昨? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮褥赊,結(jié)果婚禮上糕档,老公的妹妹穿的比我還像新娘。我一直安慰自己拌喉,他們只是感情好速那,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尿背,像睡著了一般端仰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上田藐,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天荔烧,我揣著相機(jī)與錄音,去河邊找鬼汽久。 笑死鹤竭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的景醇。 我是一名探鬼主播臀稚,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼啡直!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苍碟,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤酒觅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后微峰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舷丹,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年蜓肆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颜凯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谋币。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖症概,靈堂內(nèi)的尸體忽然破棺而出蕾额,到底是詐尸還是另有隱情,我是刑警寧澤彼城,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布诅蝶,位于F島的核電站,受9級特大地震影響募壕,放射性物質(zhì)發(fā)生泄漏调炬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一舱馅、第九天 我趴在偏房一處隱蔽的房頂上張望缰泡。 院中可真熱鬧,春花似錦代嗤、人聲如沸棘钞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽武翎。三九已至,卻和暖如春溶锭,著一層夾襖步出監(jiān)牢的瞬間宝恶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工趴捅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垫毙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓拱绑,卻偏偏與公主長得像综芥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子猎拨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一膀藐、簡單工廠模式 簡單工廠的定義:提供一個(gè)創(chuàng)建對象實(shí)例的功能,而無須關(guān)心其具體實(shí)現(xiàn)红省。被創(chuàng)建實(shí)例的類型可以是接口额各、抽...
    墨雨軒夏閱讀 479評論 0 3
  • 一、簡單工廠模式 簡單工廠的定義:提供一個(gè)創(chuàng)建對象實(shí)例的功能吧恃,而無須關(guān)心其具體實(shí)現(xiàn)虾啦。被創(chuàng)建實(shí)例的類型可以是接口、抽...
    Java架構(gòu)_師閱讀 404評論 0 0
  • 一、簡單工廠模式 簡單工廠的定義:提供一個(gè)創(chuàng)建對象實(shí)例的功能傲醉,而無須關(guān)心其具體實(shí)現(xiàn)蝇闭。被創(chuàng)建實(shí)例的類型可以是接口、抽...
    JAVA一方閱讀 203評論 0 0
  • 什么是工廠模式 工廠模式是一種廣泛使用的設(shè)計(jì)模式硬毕,被廣泛使用與JDK和一些框架中呻引,比如著名的Spring和Stru...
    jackLee閱讀 1,055評論 0 1
  • 工廠模式概述 工廠模式是設(shè)計(jì)模式的一種,從功能上來說昭殉,它的主要作用是創(chuàng)建對象苞七。細(xì)分一下,有三種不同類型的工廠模式挪丢,...
    flionel閱讀 699評論 5 3