工廠模式是JAVA中最經常使用的設計模式之一,屬於建立型模式。設計模式
需求:封裝建立邏輯。主要針對於複雜對象的初始化。(我的認爲是對複雜對象初始化邏輯進行抽取)
關鍵代碼:建立一個工廠類,封裝一個函數並返回實例(Factory::getInstance)。函數
class A {}
class B extends A {}
class C extends A {}設計
1 簡單工廠:code
public class Factory { public [static] A getInstance() {return new A();} public [static] B getInstance() {return new B();} }
2 複雜工廠:對象
public class Factory { public [static] A getInstance(String code) { switch (code) { case "A": return new A(); break; case "B": return new B(); break; case "C": return new C(); break; default: } } }
3 抽象簡單工廠:本質與1 簡單工廠無差異,主要是強調返回實例向上造型get
public Factory { public [static] A getInstance() {return new A()}; public [static] A getInstance() {return new B()}; // B 向上造型爲 A }
4 抽象複雜工廠:it
public abstract class Factory { public abstract A getInstance(); } public class BFactory extends Factory { public A getInstance() { return new B(); } } public class CFactory extends Factory { public A getInstance() { return new C(); } }
以上分類,本質是以待生產的實例[例中A、B、C]是否須要向上造型來區分是否爲抽象工廠。class
假設須要添加 public class D extends A {} 時,以上四種類型是如何實現擴展的?
1【簡單工廠】 添加新的方法,違背開閉原則,擴展性差。
2【複雜工廠】添加 「D」 判斷,違背開閉原則,擴展性差。
3【抽象簡單工廠】 同 1【簡單工廠】,擴展性差。
4【抽象複雜工廠】實現 DFactory便可,而且 DFactory 與 原兩個工廠類均可以向上造型爲Factory,擴展性好。擴展
以上爲我的理解,理解錯誤之處請幫忙指正,多謝!方法