zoukankan      html  css  js  c++  java
  • C#设计模式之简单工厂模式

    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. 总结

    优点:

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

     缺点:

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

    使用场景:

    • 工厂类创建对象类比较少。
    • 系统中只知道传入工厂类参数,对于如何因创建对象不关心。
    • 因简单工厂很容易违反了高内聚原则,一般只在简单情况下应用。
  • 相关阅读:
    nmap加快扫描速度(转载)
    deepin换源
    利用74HC595实现的流水灯 Arduino
    解决用vscode开发arduino时Serial未定义
    JS获取格式为YYYY-MM-DD的当前日期
    链式前向星存图
    Nginx+FFmpeg实现RTSP转RTMP
    非root用户安装centos的jdk
    Nginx配置请求头
    Eclipse-Che 安装(Centos)
  • 原文地址:https://www.cnblogs.com/liujie2272/p/5485036.html
Copyright © 2011-2022 走看看