工廠類擁有一個工廠方法(create),接受了一個參數(shù),通過不同的參數(shù)實例化不同的產(chǎn)品類。
- 簡單工廠模式
- 實現(xiàn)一:簡單工廠類
public class AnimalFactory {
//簡單工廠設計模式(負擔太重、不符合開閉原則)
public static Animal createAnimal(String name){
if ("cat".equals(name)) {
return new Cat();
}else if ("dog".equals(name)) {
return new Dog();
}else if ("cow".equals(name)) {
return new Dog();
}else{
return null;
}
}
}
- 實現(xiàn)二:靜態(tài)工廠模式
//該簡單工廠,也稱為靜態(tài)方法工廠
public class AnimalFactory2 {
public static Dog createDog(){
eturn new Dog();
}
public static Cat createCat(){
return new Cat();
}
}
- 工廠方法模式
- 實現(xiàn):抽象工廠類
抽象工廠是應對產(chǎn)品族概念的。
抽象出來的工廠對象,
// 抽象出來的動物工廠----它只負責生產(chǎn)一種產(chǎn)品
public abstract class AnimalFactory {
// 工廠方法
public abstract Animal createAnimal();
}
我們可以定義根據(jù)這個產(chǎn)品族里具體的產(chǎn)品類型去設計子類工廠,
// 具體的工廠實現(xiàn)類1
public class CatFactory extends AnimalFactory {
@Override
public Animal createAnimal() {
return new Cat();
}
}
// 具體的工廠實現(xiàn)類2
public class DogFactory extends AnimalFactory {
@Override
public Animal createAnimal() {
return new Dog();
}
}
總結(jié),
很明顯,簡單工廠的特點就是“簡單粗暴”,通過一個含參的工廠方法,我們可以實例化任何產(chǎn)品類,上至飛機火箭,下至土豆面條,無所不能。所以簡單工廠有一個別名:上帝類。
任何”東西“的子類都可以被生產(chǎn),負擔太重。當所要生產(chǎn)產(chǎn)品種類非常多時,工廠方法的代碼量可能會很龐大。在遵循開閉原則(對拓展開放,對修改關閉)的條件下,簡單工廠對于增加新的產(chǎn)品,無能為力。因為增加新產(chǎn)品只能通過修改工廠方法來實現(xiàn)。
抽象工廠模式增加了擴展性。