C#设计模式之简单工厂模式(Simple Factory)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#设计模式之简单工厂模式(Simple Factory)

C#设计模式之简单工厂模式(Simple Factory)

 2016/5/21 5:34:26  Swich  程序员俱乐部  我要评论(0)
  • 摘要:1.概述简单工厂模式就是将一个类的实例化交给一个静态工厂来执行。2.使用频率中3.模式结构3.1机构图3.2模式中的角色Product:抽象类,把具体产品类公共的代码进行抽象和提取封装在一抽象产品类中。CreateProduct:具体的产品类,将需要创建的各种不同产品对象封装到具体的产品类中。Factory:工厂类,用于创建不同产品的示例,在工厂类中提供一个创建产品工厂方法,该方法可根据传入的参数不同创建不同的具体的商品对象。Client:客户端
  • 标签:C# 模式 CTO 设计 设计模式

1. 概述 

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

2. 使用频率

           

3. 模式结构

   3.1 机构图

  3.2 模式中的角色

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

4. 模式结构代码

Product:

class="code_img_closed" src="/Upload/Images/2016052105/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('dfa0bf24-8ffa-4bee-889f-c51c961ec363',event)" src="/Upload/Images/2016052105/2B1B950FA3DF188F.gif" alt="" />
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. 总结

优点:

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

 缺点:

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

使用场景:

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