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
文章整理自书籍《设计模式与游戏完美开发》 菜升达 著