工厂模式是对简单工厂模式的进一步抽象,简单工厂模式增加新产品违背了开闭原则,而工厂模式的优化,解决了这一问题。
该模式优点:遵循了开闭原则,扩展性较强。缺点是产品和工厂是一一对应的关系,产品较多时,就会产生较多的工厂类的定义,增加了代码的复杂度。
该模式有由四个角色组成:
1. 工厂抽象接口:提供创建产品的接口
2.工厂具体实现: 实现工厂接口的具体方法
3. 产品抽象接口:提供产品的特性和功能
4.产品具体实现:实现了抽象产品角色所定义的接口,与工厂一一对应的关系
namespace Designmode.Factory
{
/// <summary>
/// 工厂抽象类
/// </summary>
public interface IFactory
{
/// <summary>
/// 工厂类生产产品
/// </summary>
/// <returns></returns>
IProduct CreatePruduct();
}
}
namespace Designmode.Factory
{
/// <summary>
/// 产品的抽象类
/// </summary>
public interface IProduct
{
/// <summary>
/// 做某些事情
/// </summary>
void DoSomething();
}
}
using System;
namespace Designmode.Factory
{
/// <summary>
/// 产品A的具体实现类
/// </summary>
public class ProductA : IProduct
{
/// <summary>
/// 产品A的方法实现
/// </summary>
public void DoSomething()
{
Console.WriteLine($"Product A DoSomething");
}
}
}
using System;
//AFactory.cs
namespace Designmode.Factory
{
/// <summary>
/// 产品B具体实现类
/// </summary>
public class ProductB : IProduct
{
/// <summary>
/// 产品B的方法实现
/// </summary>
public void DoSomething()
{
Console.WriteLine($"Product A DoSomething");
}
}
}
namespace Designmode.Factory
{
/// <summary>
/// A产品工厂
/// </summary>
public class AFactory : IFactory
{
/// <summary>
/// 创建A产品
/// </summary>
/// <returns>返回A产品</returns>
public IProduct CreatePruduct()
{
return new ProductA();
}
}
}
namespace Designmode.Factory
{
/// <summary>
/// B产品工厂
/// </summary>
public class BFactory : IFactory
{
/// <summary>
/// 创造产品
/// </summary>
/// <returns>返回B产品</returns>
public IProduct CreatePruduct()
{
return new ProductB();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Designmode.Factory;
namespace Designmode
{
class Program
{
static void Main(string[] args)
{
IFactory factory = new AFactory();
IProduct product = factory.CreatePruduct();
product.DoSomething();
}
}
}