簡單工廠模式就是工廠類根據傳入的參數決定建立出哪一種産品的執行個體。簡單工廠模式涉及到工廠角色、抽象産品角色和具體産品角色。
- 工廠類(Creator):是簡單工廠的核心,含有與應用緊密相關的業務邏輯。工廠類在用戶端的調用下建立産品對象,往往由一個java類實作。
- 抽象産品(Product):是所有具體産品的父類或者接口。
- 具體産品(Concrete Product):工廠類建立出的具體執行個體。
假設有一個Fruit[水果類]的接口,定義了生長、收獲、種植的行為。工廠類FruitGardener會根據用戶端的要求,建立出不同的水果對象,如果工廠類接受的參數不符合要求,就會抛出異常。 Fruit接口:
public interface Fruit {
// 生長
void grow();
// 收獲
void harvest();
// 種植
void plant();
}
Apple類:
public class Apple implements Fruit {
@Override
public void grow() {
System.out.println("apple.grow()");
}
@Override
public void harvest() {
System.out.println("apple.harvest()");
}
@Override
public void plant() {
System.out.println("apple.plant()");
}
}
同理獲得Grape.java Strawberry.java 工廠類:
public class FruitGardener {
/**
* 靜态工廠方法
* @param type
* @return
*/
public static Fruit getFruitFactory(String type) {
if (type.equalsIgnoreCase("apple")) {
return new Apple();
} else if (type.equalsIgnoreCase("grape")) {
return new Grape();
} else if (type.equalsIgnoreCase("strawberry")) {
return new Strawberry();
} else {
throw new BadFruitException();
}
}
}
簡單工廠模式的優缺點: 優點:
- 該模式的核心是工廠類。該類含有必要的邏輯判斷,可以決定在什麼時候建立哪一個産品類的執行個體。而用戶端可以免去直接建立産品對象的責任,僅僅負責“消費”産品。實作了對責任的分割。
缺點:
- 當産品之間存在複雜的層次等級關系,簡單工廠類就顯得乏力。
- 工廠類中聚集了所有的判斷邏輯,如果這個“關鍵的樞紐”不能夠正常工作,會造成整個系統的崩潰。
- 當具體的産品接口不同時,簡單工廠來判斷産生什麼樣的産品就會顯得混亂。
- 簡單工廠的工廠方法是靜态方法,而靜态方法無法繼承。是以,簡單工廠角色無法實作基于繼承的結構。