你的位置:首页 > ASP.net教程

[ASP.net教程]C#设计模式之简单工厂模式(Simple Factory)


1. 概述 

          简单工厂模式就是将一个类的实例化交给一个静态工厂来执行。

2. 使用频率

           

3. 模式结构

   3.1 机构图

  3.2 模式中的角色

  • Product:抽象类,把具体产品类公共的代码进行抽象和提取封装在一抽象产品类中。
  • CreateProduct:具体的产品类,将需要创建的各种不同产品对象封装到具体的产品类中。
  • Factory:工厂类,用于创建不同产品的示例,在工厂类中提供一个创建产品工厂方法,该方法可根据传入的参数不同创建不同的具体的商品对象。
  • Client:客户端,调用工厂类中的工厂方法并传入参数即可获得一个产品对象。

4. 模式结构代码

Product:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SimpleFactory{  public abstract class Product  {  }}

View Code

CreateProduct:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SimpleFactory{  public class CreateProduct : Product  {  }}

View Code

Factory:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SimpleFactory{  public class Factory  {    public static Product CreateProduct()    {      return new CreateProduct();    }  }}

View Code

Program:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SimpleFactory{  class Program  {    static void Main(string[] args)    {      Product product = Factory.CreateProduct();      Console.WriteLine("Created {0}", product.GetType().Name);      Console.ReadLine();    }  }}

View Code

5. 总结

优点:

  • 职责单一,实现简单,且实现了客户端代码与具体的实现解耦。
  • 工厂类是模式主体,包含了必要的逻辑判断,根据外界的给定的信息来创建哪个具体对象。
  • 通过工厂类,摆脱了直接创建对象的局面,且不比管这些对象是如何创建的。
  • 明确了各自的职责和权益,有利于整个软件体系结构的优化。

 缺点:

  •  由于工厂类集中了类所有类的创建实例的逻辑,违反了高内聚责任分配原则; 将类创建实例逻辑放在工厂类中,它所创建的类是事先考虑到的,如果要创建新的类的话,则要修改工厂类。因此它违背开放封闭原则。
  •  当系统中具体产品不断增多时,工厂类会要根据不同条件创建产品,导致条件判断逻辑和具体的产品交错在一起,对系统的扩展和维护不利。

使用场景:

  • 工厂类创建对象类比较少。
  • 系统中只知道传入工厂类参数,对于如何因创建对象不关心。
  • 因简单工厂很容易违反了高内聚原则,一般只在简单情况下应用。