1. 程式人生 > >【Unity與23種設計模式】抽象工廠模式(Abstract Factory)

【Unity與23種設計模式】抽象工廠模式(Abstract Factory)

根據 strac 結果 產品 不同 面試 public str 構建

GoF中定義:

“提供一個能夠建立整個類群組或有關聯的對象,而不必指明它們的具體類。”

意思就是

根據不同的執行環境產生不同的抽象類子類

抽象工廠模式經常在面試中會涉及到

下面的例子為工廠1和工廠2

兩個工廠都可以生成產品A和B

但是兩個工廠工藝不同

所以工廠1只能生產產品A1和B1

工廠2只能生產產品A2和B2

//可生成各抽象成品對象的操作
public abstract class AbstractFactory{
    public abstract AbstractProductA CreateProductA();
    public abstract AbstractProductB CreateProductB();
}

//實現可構建具體成品對象的操作1 public class ConcreteFactory1 : AbstractFactory { public ConcreteFactory1() { } public override AbstractProductA CreateProductA() { return new ProductA1(); } public override AbstractProductB CreateProductB() { return new ProductB1(); } }
//實現可構建具體成品對象的操作2 public class ConcreteFactory2 : AbstractFactory { public ConcreteFactory2() { } public override AbstractProductA CreateProductA() { return new ProductA2(); } public override AbstractProductB CreateProductB() { return new ProductB2(); } }
//
成品對象類型A接口 public abstract class AbstractProductA { } //成品對象類型A1 public class ProductA1 : AbstractProductA { public ProductA1() { Debug.Log("生成對象類型A1"); } } //成品對象類型A2 public class ProductA2 : AbstractProductA { public ProductA2() { Debug.Log("生成對象類型A1"); } } //成品對象類型B接口 public abstract class AbstractProductB { } //成品對象類型A1 public class ProductB1 : AbstractProductB { public ProductB1() { Debug.Log("生成對象類型A1"); } } //成品對象類型A2 public class ProductB2 : AbstractProductB { public ProductB2() { Debug.Log("生成對象類型A1"); } }
//測試類
public class TestAbstractFactory {
    void UnitTest() {
        AbstractFactory Factory = null;

        //工廠1
        Factory = new ConcreteFactory1();
        Factory.CreateProductA();
        Factory.CreateProductB();

        //工廠2
        Factory = new ConcreteFactory2();
        Factory.CreateProductA();
        Factory.CreateProductB();
    }
}
//測試結果
//生成對象類型A1
//生成對象類型B1
//生成對象類型A2
//生成對象類型B2

文章整理自書籍《設計模式與遊戲完美開發》 菜升達 著

【Unity與23種設計模式】抽象工廠模式(Abstract Factory)