本文共 1881 字,大约阅读时间需要 6 分钟。
GoF中定义:
“提供一个能够建立整个类群组或有关联的对象,而不必指明它们的具体类。”
意思就是
根据不同的执行环境产生不同的抽象类子类
抽象工厂模式经常在面试中会涉及到
下面的例子为工厂1和工厂2
两个工厂都可以生成产品A和B
但是两个工厂工艺不同
所以工厂1只能生产产品A1和B1
工厂2只能生产产品A2和B2
//可生成各抽象成品对象的操作public abstract class AbstractFactory{ public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductB();}//实现可构建具体成品对象的操作1public class ConcreteFactory1 : AbstractFactory { public ConcreteFactory1() { } public override AbstractProductA CreateProductA() { return new ProductA1(); } public override AbstractProductB CreateProductB() { return new ProductB1(); }}//实现可构建具体成品对象的操作2public class ConcreteFactory2 : AbstractFactory { public ConcreteFactory2() { } public override AbstractProductA CreateProductA() { return new ProductA2(); } public override AbstractProductB CreateProductB() { return new ProductB2(); }}
//成品对象类型A接口public abstract class AbstractProductA { }//成品对象类型A1public class ProductA1 : AbstractProductA { public ProductA1() { Debug.Log("生成对象类型A1"); }}//成品对象类型A2public class ProductA2 : AbstractProductA{ public ProductA2() { Debug.Log("生成对象类型A1"); }}//成品对象类型B接口public abstract class AbstractProductB { }//成品对象类型A1public class ProductB1 : AbstractProductB{ public ProductB1() { Debug.Log("生成对象类型A1"); }}//成品对象类型A2public 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
文章整理自书籍《设计模式与游戏完美开发》 菜升达 著
转载地址:http://uvgyb.baihongyu.com/