设计模式---抽象工厂
2014-10-29 21:34 周信达 阅读(219) 评论(0) 编辑 收藏 举报组成
- 抽象层
- 抽象工厂,负责创建抽象族类产品
- 抽象产品,负责提供抽象族类产品定义
- 实现层
- 具体对象,负责实现族类具体产品
- 具体产品,负责实现族类具体产品
- 应用层
- 使用配置或IOC容器配置具体工厂
- 针对抽象接口编码创建具体产品
UML类图
实践
- 一般抽象层可以通过接口或抽象类进行定义,具体选择接口或抽象类,可以根据实际情况考量
- 抽象层一般定义在单独的基础程序集中,定义核心程序集FactoryCore.dll
- 实现层一般定义在扩展的程序集中,依赖抽象层,定义扩展程序集FactoryCore.Extension.dll
- 应用层针对抽象接口编程,具体如何选择实现层,可以通过配置或者DI容器进行管理
类图
代码
抽象产品
namespace AbstractFactory.AbstractProduct { /// <summary> /// 族类A产品抽象 /// </summary> public abstract class AbstractProductA { public abstract string Name { get; } public abstract void Action(); } }
抽象工厂
namespace AbstractFactory.AbstractFactory { /// <summary> /// 抽象工厂类 /// 提供抽象接口,用于创建抽象族类产品 /// </summary> public abstract class ProductFactory { public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductB(); } }
具体产品
namespace AbstractFactory.ConcreteObject { class ProductA1 : AbstractProductA { public override string Name { get { return "ProductA1"; } } public override void Action() { Console.WriteLine("Action as Product A1"); } } }
具体工厂
namespace AbstractFactory.ConcreteFactory { class Factory1 : ProductFactory { public override AbstractProductA CreateProductA() { return new ProductA1(); } public override AbstractProductB CreateProductB() { return new ProductB1(); } } }
应用层
namespace AbstractFactory { class Consumer { public Consumer(ProductFactory factory) { ProductFactory = factory; ProductA = ProductFactory.CreateProductA(); ProductB = ProductFactory.CreateProductB(); } public ProductFactory ProductFactory { get; set; } public AbstractProductA ProductA { get; set; } public AbstractProductB ProductB { get; set; } public void DoSomething() { ProductA.Action(); ProductB.Action(); } } }
后续
关于简单工厂和工厂方法,由于思想差异不是很大,在这里就不一一介绍了,具体可以参考:
更多的,请参考互联网:Differences between Abstract Factory Pattern and Factory Method