1. 程式人生 > 程式設計 >設計模式系列-工廠模式

設計模式系列-工廠模式

積千里跬步,匯萬裡江河.每天進步一點點,終有一天將成大佬

前言

工廠模式有以下三種

  • 簡單工廠模式
  • 工廠方法模式
  • 抽象工廠模式

其中簡單工廠模式不在23中模式之中,更多的是一種程式設計習慣,而我們平常所說的工廠模式一般指的是工廠方法模式,抽象工廠在實際的業務開發中也用的比較少,因為它有時候違背了開閉原則.由於篇幅有限,抽象工廠本文就不講了,以後單獨講;

簡單工廠模式

簡單工廠到底有多簡單呢?簡單到只有一個工廠,這個工廠相當於是萬能工廠,你想要什麼,只要和它說一聲,它就會想方設法的去抱你建立,然後給你;舉個買車的簡單的例子:

當我要買車的時候,我選了這兩種車.

/**
 * 建立一個汽車介面
 * */

public interface Car {
    /**
     * 汽車能動
     * */

    void run();
}
複製程式碼
/**
 * 賓士車
 * */
class Benz implements @Override
    public run() {
        System.out.println("大奔開動了");
    }
}
複製程式碼
/**
 * 五菱神車
 * */
Wuling "五菱神車開動了");
    }
}
複製程式碼

選是選好了,可是要怎麼得到呢?是不是下意識的new一個出來?

//我要賓士車
Benz myCar=new Benz();
複製程式碼

如果是這樣的話,就相當於自己親手造了一輛賓士車出來,因為是你自己new

出來的嘛!!!!!

這種事情當然是交給工廠去做嘛,叫工廠去new就可以了,我只要交錢給工廠就可以了.誒,有錢真好!

/**
 * 汽車工廠
 *
 * 靜態工廠
 *
 * 簡單工廠
 * */
CarFactory {
    static Car getCar(String type){
        if("我要五菱神車".equals(type)){
            return new Wuling();
        }
        if ("我要大賓士".equals(type)){
            new Benz();
        }
        null;
    }
}
複製程式碼

找到了這個工廠之後,我只要直接告訴它我要什麼車就可以了,工廠就會幫我造好給我;

/**
 * 買車
 * */
CostumerMain {
    static main(String[] args) {
        //跟車廠說一聲我要五菱神車
        Car wuling=CarFactory.getCar("我要五菱神車");
        //跟車廠說一聲我要大賓士
        Car Benz=CarFactory.getCar("我要大賓士");

        //開著五菱神車去兜兜風
        wuling.run();
        //開著大奔去兜兜風
        Benz.run();
    }
}

//五菱神車開動了
//大奔開動了
複製程式碼

這樣子,買車就結束了,果然錢可以解決一切,哈哈,開個玩笑~

工廠方法模式

上次買了兩輛車之後,白天開著大奔去街上撩妹,晚上開著五菱神車去秋名山飆車,從此走向了人生巔峰.可是好景不長,大奔開著開著就漏油了,五菱神車終於也翻車了.

找到了上次買車的工廠,準備換個低調點的勞斯萊斯.可是那家工廠竟然告訴我說他們那邊還沒有造過勞斯萊斯,需要改造一下工廠,然後才能生產勞斯萊斯,叫我等他們改造好之後再來買.聽他們這麼說後,我心想,我這分分鐘幾百萬上下的人,時間就是金錢.我可等不了.

於是幾番尋找之後,發現英國有個勞斯萊斯車場,專門來生產勞斯萊斯.於是和接待我的中介小姐姐聊了一下,發現他們的生產模式是這樣的:

/**
 * 他們有個汽車工廠總部,用來定義車廠該幹什麼
 * */
AllCarFactory {
    /**
    * 生產汽車
    */

    Car getCar();
}
複製程式碼
/**
* 有個汽車規則,用來定義汽車能幹什麼
*/
/**
    * 汽車能跑
    */

    /**
 * 勞斯萊斯汽車
 * */

RollsRoyce /**
    * 勞斯萊斯能跑起來
    */

    "勞斯萊斯開起來了!!");
    }
}
複製程式碼
/**
 * 勞斯萊斯汽車工廠
 * */
RollsRoyceFactory /**
    * 生產一輛勞斯萊斯
    */

    public Car getCar() {
        new RollsRoyce();
    }
}
複製程式碼

找到車廠後,我毫不猶豫和接待我的小姐姐說給我來一輛,小姐姐見我這麼豪爽,準備再忽悠我買幾輛車,不推薦我幾輛車....她知道我之前買了賓士和五菱神車,和我說他們這邊還有還有五菱車廠和賓士車廠,都是專門用來造同一種車的.於是我就去參觀了一下:

/**
* 五菱神車
*/
/**
    * 五菱神車能飆車
    */

    "五菱神車開動了");
    }
}
複製程式碼
/**
 * 五菱神車工廠
 * */
WulingFactory /**
    * 生產一輛五菱神車
    */

    new Wuling();
    }
}
複製程式碼

再去看看賓士車廠:

/**
* 賓士汽車
*/
/**
    * 賓士汽車能跑
    */

    /**
 * 賓士汽車工廠
 * */

BenzFactory /**
    * 生產一輛賓士汽車
    */

    new Benz();
    }
}
複製程式碼

看完之後,感覺還可以,於是分別到三個工廠買了三輛車,然後高高興興的回家了:

看看我買車的過程:

/**
 * 土豪買車記
 * */
//去五菱車廠買車
        Car wuling=new WulingFactory().getCar();
        //去賓士車廠買車
        Car benz=new BenzFactory().getCar();
        //去勞斯萊斯車廠買車
        Car rollsRoyce=new RollsRoyceFactory().getCar();

        //開著三輛車去兜兜風
        wuling.run();
        benz.run();
        rollsRoyce.run();
    }
}


//大奔開動了
//勞斯萊斯開起來了!!
複製程式碼

總結

​ 買完車後,小姐姐還和我說他們這樣的模式生產車的話有好多好處,比如一個車廠只要負責一種車的生產和售後,這樣的話,生產效率就會比較高,賺的錢自然也多,同時每個車廠還可以舉行不同活動,來吸引消費者,同時,你如果哪個品牌的車出現了問題了,直接去那輛車的工廠,基本上都能幫你解決問題,畢竟術業有專攻,對比前一個工廠什麼都造的萬金油來說,深入一項技術比什麼技術都懂好;

​ 不過有時候,萬金油工廠也挺好的,就是一站式服務,你要什麼它都有,不用到處亂跑,省心省力.所以還是要根據什麼行業來執行什麼模式,這樣才能利益最大化;