設計模式(創建型)—— 工廠方法模式
傳統的獲取對象方法,是通過 new 關鍵字獲取一個對象,但是如果多個地方都需要該對象,就需要 new 很多次,這時候如果這個類發生了一些改變,如類名變了,構造方法新增了參數等,那么我們就需要修改很多地方,這就很麻煩。
工廠方法模式,就是通過一個設計一個工廠類來獲取指定類的對象,因為都是通過工廠來獲取對象,一旦對象所屬類發生了改變,我們只需要修改工廠中獲取對象的方法,這樣一來大大減少修改的工作量。
但此時如果我們要求工廠產出新的對象,就不得不在工廠類中新增對應的獲取方法,這就違背類開閉原則,所以我們可以進行抽象化,以水果生產為例子,我們可以設計一個抽象水果工廠類,里面有獲取水果的方法。
//抽象水果工廠
public abstract class FruitFactory <T extends Fruit>{public abstract T create();
}
然后需要生產什么水果就建立對應的水果加工廠
//蘋果加工廠
public class AppleFactory extends FruitFactory{@Overridepublic Fruit create() {return new Apple();}
}
此時當我們需要一個蘋果對象時,就可以通過蘋果工廠對象來獲取一個蘋果
public class test01 {public static void main(String[] args) {System.out.println(new AppleFactory().create());}
}
假如我們又想生產橘子,那就建立一個橘子加工廠,然后通過該工廠獲取到橘子對象
public class OrangeFactory extends FruitFactory{@Overridepublic Fruit create() {return new Orange();}
}
工廠方法模式好處是修改方便,但壞處就是每當我們需要生產新的東西時都得建立對應的生產線,如果生產種類過多,那么生產線就非常龐大,而這些生產線大體上有很相似,這就導致我們會浪費時間做重復工作,所以這種模式比較適合所需對象類型比較少的情況