02- 工廠模式:

工廠模式是我們最常用的實例化對象模式了杖虾,是用工廠方法代替new操作的一種模式。

著名的Jive論壇 ,就大量使用了工廠模式精盅,工廠模式在Java程序系統(tǒng)可以說是隨處可見帽哑。因為工廠模式就相當于創(chuàng)建實例對象的new,我們經(jīng)常要根據(jù)類Class生成實例對象渤弛,如A a=new A() 祝拯;

工廠模式也是用來創(chuàng)建實例對象的且具有更大的可擴展性和盡量少的修改量。

工廠模式定義
【通常我們都要在創(chuàng)建sample實例時一般是用new ,但是如果創(chuàng)建對象的同時要進行初始化的工作,且不是簡單賦值 她肯,查詢數(shù)據(jù)庫佳头,是有很長一段代碼操作,new 中的構造函數(shù)是沒辦法滿足晴氨。如果非寫入構造函數(shù)中康嘉,也是有悖于Java[面向對象的原則,但是如果利用工廠模式籽前,將代碼“封裝”起來(減少段和段之間耦合聯(lián)系性)亭珍,這樣會降低代碼耦合 提高代碼服用≈澹】


下面例子中鼠標肄梨,鍵盤,耳麥為產(chǎn)品挠锥,惠普众羡,戴爾為工廠。

1.簡單工廠模式

簡單工廠模式:簡而言之蓖租,就是有一個專門生產(chǎn)某個產(chǎn)品的類粱侣。

比如下圖中的鼠標工廠,專業(yè)生產(chǎn)鼠標蓖宦,給參數(shù) 0齐婴,生產(chǎn)戴爾鼠標,給參數(shù) 1稠茂,生產(chǎn)惠普鼠標柠偶。


/** @create: 2020-02-15 22:20
 * 簡單工廠模式
 **/
public class SimpleFactory {
    public static void main(String[] args) {
        Car  car1 = (Car)Factory.get("奧迪");
        car1.create();
        Car  car2 = (Car)Factory.get("寶馬");
        car2.create();
    }
}
//生產(chǎn)車的工廠
class Factory {
    public static Object get(String carType) {
        Car car =null;
        if (carType.equals("奧迪")) {
            car = new Aodi();
        } else if (carType.equals("寶馬")) {
            car = new Baoma();
        }
        return car;
    }
}
//奧迪車的類
class Aodi implements Car{
    @Override
    public void create() {
        System.out.println("生產(chǎn)奧迪");
    }
}
//寶馬車的類
class Baoma implements Car{
    @Override
    public void create() {
        System.out.println("生產(chǎn)寶馬");
    }
}
//汽車的接口
interface Car {
    void create();
}

2.工廠模式

工廠模式也就是鼠標工廠是個父類,有生產(chǎn)鼠標這個接口主慰。
戴爾鼠標工廠嚣州,惠普鼠標工廠繼承它,可以分別生產(chǎn)戴爾鼠標共螺,惠普鼠標。
生產(chǎn)哪種鼠標不再由參數(shù)決定情竹,而是創(chuàng)建鼠標工廠時藐不,由戴爾鼠標工廠創(chuàng)建。
后續(xù)直接調用鼠標工廠.生產(chǎn)鼠標()即可

/**工廠方法模式
 **/
public class MethodFactoryTest {
    public static void main(String[] args) {
        //需要生產(chǎn)奔馳就調用奔馳車的工廠
        Aotuo aotuo = AotuoFactory.Create();
        aotuo.Run();
        //需要生產(chǎn)奧拓就調用生產(chǎn)凹凸車的工廠
        Benchi benchi = BenchiFactory.Create();
        benchi.Run();
    }

}
//創(chuàng)建一個接口
interface Cars{
   void  Run();
}
//生產(chǎn)奧拓車的工廠
class AotuoFactory {
    public static Aotuo Create() {
        return new Aotuo();
    }

}
//生產(chǎn)奔馳車的工廠
class BenchiFactory {
    public static Benchi Create() {
         return new Benchi() ;
    }
}

class Aotuo implements Cars{
    @Override
    public void Run() {
        System.out.println("生產(chǎn)奧拓");
    }
}
class Benchi implements Cars{
    @Override
    public void Run() {
        System.out.println("生產(chǎn)奔馳");
    }
}

3.抽象工廠模式

抽象工廠模式也就是不僅生產(chǎn)鼠標,同時生產(chǎn)鍵盤雏蛮。
也就是 PC 廠商是個父類涎嚼,有生產(chǎn)鼠標,生產(chǎn)鍵盤兩個接口挑秉。
戴爾工廠法梯,惠普工廠繼承它,可以分別生產(chǎn)戴爾鼠標+戴爾鍵盤犀概,和惠普鼠標+惠普鍵盤立哑。
創(chuàng)建工廠時,由戴爾工廠創(chuàng)建姻灶。
后續(xù)工廠.生產(chǎn)鼠標()則生產(chǎn)戴爾鼠標铛绰,工廠.生產(chǎn)鍵盤()則生產(chǎn)戴爾鍵盤。

3-1 .在抽象工廠模式中产喉,假設我們需要增加一個工廠

假設我們增加華碩工廠捂掰,則我們需要增加華碩工廠,和戴爾工廠一樣曾沈,繼承 PC 廠商这嚣。
之后創(chuàng)建華碩鼠標,繼承鼠標類塞俱。創(chuàng)建華碩鍵盤姐帚,繼承鍵盤類即可。


3-2 .在抽象工廠模式中敛腌,假設我們需要增加一個產(chǎn)品

假設我們增加耳麥這個產(chǎn)品卧土,則首先我們需要增加耳麥這個父類,再加上戴爾耳麥像樊,惠普耳麥這兩個子類尤莺。
之后在PC廠商這個父類中,增加生產(chǎn)耳麥的接口生棍。最后在戴爾工廠颤霎,惠普工廠這兩個類中,分別實現(xiàn)生產(chǎn)戴爾耳麥涂滴,惠普耳麥的功能友酱。 以上。


/**
 * 抽象工廠模式
 **/
public class AbstractFactory {
    public static void main(String[] args) {
        DaierKebo daierKebo = DaierFactory.CreateKebo();
        daierKebo.click();
        DaierMouse daierMouse = DaierFactory.CreateMouse();
        daierMouse.Run();
        HuibuKebo huibuKebo = HuibuFactory.CreateKebo();
        huibuKebo.click();
        HuipuMouse huipuMouse = HuibuFactory.CreateMouse();
        huipuMouse.Run();
        LianxiangKebo lianxiangKebo = LianxiangFactory.CreateKebo();
        lianxiangKebo.click();
        LianxiangMouse lianxiangMouse = LianxiangFactory.CreateMouse();
        lianxiangMouse.Run();
    }
}

//生產(chǎn)鼠標和接口 和生產(chǎn)鍵盤的接口
interface  Mouse{
    void Run();
}
interface Kebo{
    void click();
}

//接口的實現(xiàn)類惠普 和戴爾
class DaierMouse implements  Mouse{
    @Override
    public void Run() {
        System.out.println("生產(chǎn)戴爾的鼠標");
    }
}
class HuipuMouse implements  Mouse{
    @Override
    public void Run() {
        System.out.println("生產(chǎn)惠普的鼠標");
    }
}

class DaierKebo implements  Kebo{
    @Override
    public void click() {
        System.out.println("生產(chǎn)戴爾的鍵盤");
    }
}
class HuibuKebo implements  Kebo{
    @Override
    public void click() {
        System.out.println("生產(chǎn)惠普的鍵盤");
    }
}

//戴爾 和惠普的工廠
class DaierFactory{
   public static  DaierMouse CreateMouse(){
        return new DaierMouse();
    }
    public static  DaierKebo CreateKebo(){
        return new DaierKebo();
    }
}
class  HuibuFactory{
    public static  HuipuMouse CreateMouse(){
        return new HuipuMouse();
    }
    public static  HuibuKebo CreateKebo(){
        return new HuibuKebo();
    }
}

//增加一個聯(lián)想公司
class LianxiangMouse implements  Mouse{
    @Override
    public void Run() {
        System.out.println("生產(chǎn)聯(lián)想鼠標");
    }
}
class  LianxiangKebo implements Kebo{
    @Override
    public void click() {
        System.out.println("生產(chǎn)聯(lián)想鍵盤");
    }
}
class LianxiangFactory {
    public static LianxiangMouse CreateMouse(){
        return new LianxiangMouse();
    }
    public static  LianxiangKebo CreateKebo(){
        return new LianxiangKebo();
    }
}
由此可見柔纵,工廠方法確實為系統(tǒng)結構提供了非常靈活強大的動態(tài)擴展機制缔杉,只要我們更換一下具體的工廠方法,系統(tǒng)其他地方無需一點變換搁料,就有可能將系統(tǒng)功能進行改頭換面的變化或详。

————————————————
版權聲明:本文為CSDN博主「openstack_developer」的原創(chuàng)文章系羞,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接及本聲明霸琴。
原文鏈接:https://blog.csdn.net/wqwqwqwq403/article/details/89043234

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椒振,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子梧乘,更是在濱河造成了極大的恐慌澎迎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件选调,死亡現(xiàn)場離奇詭異夹供,居然都是意外死亡,警方通過查閱死者的電腦和手機学歧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門罩引,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枝笨,你說我怎么就攤上這事袁铐。” “怎么了横浑?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵剔桨,是天一觀的道長。 經(jīng)常有香客問我徙融,道長洒缀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任欺冀,我火速辦了婚禮树绩,結果婚禮上,老公的妹妹穿的比我還像新娘隐轩。我一直安慰自己饺饭,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布职车。 她就那樣靜靜地躺著瘫俊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悴灵。 梳的紋絲不亂的頭發(fā)上扛芽,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音积瞒,去河邊找鬼川尖。 笑死,一個胖子當著我的面吹牛茫孔,可吹牛的內(nèi)容都是我干的空厌。 我是一名探鬼主播庐船,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼银酬,長吁一口氣:“原來是場噩夢啊……” “哼嘲更!你這毒婦竟也來了?” 一聲冷哼從身側響起揩瞪,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赋朦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后李破,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宠哄,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年嗤攻,在試婚紗的時候發(fā)現(xiàn)自己被綠了毛嫉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡妇菱,死狀恐怖承粤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闯团,我是刑警寧澤辛臊,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站房交,受9級特大地震影響彻舰,放射性物質發(fā)生泄漏。R本人自食惡果不足惜候味,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一刃唤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧白群,春花似錦尚胞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崖堤,卻和暖如春侍咱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背密幔。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工楔脯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胯甩。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓昧廷,卻偏偏與公主長得像堪嫂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子木柬,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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