【Unity與23種設計模式】抽象工廠模式(Abstract Factory)
阿新 • • 發佈:2017-09-07
根據 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)