首页 > 代码库 > 设计模式---抽象工厂
设计模式---抽象工厂
组成
- 抽象层
- 抽象工厂,负责创建抽象族类产品
- 抽象产品,负责提供抽象族类产品定义
- 实现层
- 具体对象,负责实现族类具体产品
- 具体产品,负责实现族类具体产品
- 应用层
- 使用配置或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(); } }}
设计模式---抽象工厂
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。