【Creational Pattern】工廠模式(Factory Pattern)

工廠模式(Factory Pattern)

抽象工廠模式(Abstract Factory Pattern)

工廠模式是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,擴展性好。擴展

以上爲我的理解,理解錯誤之處請幫忙指正,多謝!方法

相關文章
相關標籤/搜索