1.使用場景
1)子類過多,不容易管理;構(gòu)造對象過程過長;精簡代碼創(chuàng)建;
2)目前我們代碼情況: 編寫代碼的時候,我們經(jīng)常都在new對象,創(chuàng)建一個個的對象,而且還有很多麻煩的創(chuàng)建方式,eg:HashMap<String,Float> grade=new HashMap<String,Float>(),這樣的代碼創(chuàng)建方式太冗長了,難道你沒有想過把這個創(chuàng)建變的短一點么,比如:HashMap<String,Float>grade=HashMapFactory.new(),可以把你創(chuàng)建精簡一點;你也可以還有別的需求,在創(chuàng)建對象的時候,你需要不同的情況,創(chuàng)建統(tǒng)一種類別的對象,eg:我想生成不同的汽車,創(chuàng)建小轎車,創(chuàng)建卡車,創(chuàng)建公交汽車等等,都屬于同種類別:汽車,你難道沒有想過,我把這些創(chuàng)建的對象在一個工廠里來負責創(chuàng)建,我把創(chuàng)建分開化,交給一人來負責,這樣可以讓代碼更加容易管理,創(chuàng)建方式也可以簡單點。
比如:Car BMW=CarFactory.create(bmw); 把創(chuàng)建new由一個統(tǒng)一負責,這樣管理起來相當方便
3)怎么改進:這個時候,你會想到,創(chuàng)建這樣同類別的東西,我把這個權(quán)利分出去,讓一個人來單獨管理,它只負責創(chuàng)建我的對象這個事情,所以你單獨簡歷一個對象來創(chuàng)建同類的對象,這個時候,你想這個東西有點像工廠一樣,生成同樣的產(chǎn)品,所以取了個名字:工廠模式,顧名思義,只負責對象的創(chuàng)建
4)改進后的好處:代碼更加容易管理了,代碼的創(chuàng)建要簡潔很多。
5)改進后的壞處:那就是你需要單獨加一個工廠對象來負責創(chuàng)建,多需要寫點代碼。
2.一個實際的例子
創(chuàng)建寶馬汽車與奔馳汽車的例子
1)先提取出一個汽車的公用接口Car
public interface Car{
/**行駛*/
public void drive();
}
2)寶馬和奔馳汽車對象
public class BMWCar implements Car {
/**
* 汽車發(fā)動
*/
public void drive(){
System.out.println("BMW Car drive");
}
}
public class BengCar implements Car {
/**
* 汽車發(fā)動
*/
public void drive(){
System.out.println("BengChi Care drive");
}
}
3)單獨一個汽車工廠來負責創(chuàng)建
public class FactoryCar {
/**
* 制造汽車
*
* @param company 汽車公司
* @return 汽車
* @throws CreateCarException 制造汽車失敗異常
*/
public static Car createCar(Company company)throws CreateCarException{
if(company==Company.BMW){
return new BMWCar();
}else if(company==Company.Beng){
return new BengCar();
}
return null;
}
}
4)最后的代碼實現(xiàn):
Car BMWCar=FactoryCar.createCar(Company.BMW);
BMWCar.drive();