• c# 设计模式 之:工厂模式之---工厂模式


    1、uml类图:

    实现和依赖关系:

    实现:

      SportFactory、JeepFactory、HatchbackFactory 实现 IFactory 接口

      SportCar、JeepCar、HatchbackCar 实现 ICar 接口

    依赖:

      IFactory 依赖 ICar

      SportFactory 依赖 SportCar

      JeepFactory 依赖 JeepCar

      HatchbackFactory 依赖  HatchbackCar

      Client依赖 IFactory 和 ICar

    2、代码实现:

    抽象工厂代码:

    namespace CNBlogs.DesignPattern.Common
    {
        public interface IFactory
        {
            ICar CreateCar();
        }
    }

    抽象产品代码:

    namespace CNBlogs.DesignPattern.Common
    {
        public interface ICar
        {
            void GetCar();
        }
    }

    具体工厂代码:

    namespace CNBlogs.DesignPattern.Common
    {
        /// <summary>
        ///  具体工厂类: 用于创建跑车类
        /// </summary>
        public class SportFactory : IFactory
        {
            public ICar CreateCar()
            {
                return new SportCar();
            }
        }
    
        /// <summary>
        ///  具体工厂类: 用于创建越野车类
        /// </summary>
        public class JeepFactory : IFactory
        {
            public ICar CreateCar()
            {
                return new JeepCar();
            }
        }
    
        /// <summary>
        ///  具体工厂类: 用于创建两厢车类
        /// </summary>
        public class HatchbackFactory : IFactory
        {
            public ICar CreateCar()
            {
                return new HatchbackCar();
            }
        }
    }

    具体产品代码:

    namespace CNBlogs.DesignPattern.Common
    {
        /// <summary>
        /// 具体产品类: 跑车
        /// </summary>
        public class SportCar : ICar
        {
            public void GetCar()
            {
                Console.WriteLine("场务把跑车交给范·迪塞尔");
            }
        }
    
        /// <summary>
        /// 具体产品类: 越野车
        /// </summary>
        public class JeepCar : ICar
        {
            public void GetCar()
            {
                Console.WriteLine("场务把越野车交给范·迪塞尔");
            }
        }
    
        /// <summary>
        /// 具体产品类: 两箱车
        /// </summary>
        public class HatchbackCar : ICar
        {
            public void GetCar()
            {
                Console.WriteLine("场务把两箱车交给范·迪塞尔");
            }
        }
    }

    客户端代码:

      static void Main(string[] args)
            {
                // 工厂类的类名写在配置文件中可以方便以后修改
                string factoryType = ConfigurationManager.AppSettings["FactoryType"];
                // 利用.NET提供的反射可以根据类名来创建它的实例,非常方便
                var currentAssembly = System.Reflection.Assembly.GetExecutingAssembly();
                IFactory factory = Assembly.LoadFrom(currentAssembly.CodeBase).CreateInstance(factoryType) as IFactory;
                ICar car = factory.CreateCar();
                car.GetCar();
                Console.ReadKey();
            }

    App.config:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    
      <appSettings>
        <add key="FactoryType" value="CAFactory.HatchbackFactory"/>
      </appSettings>
    
    </configuration>
  • 相关阅读:
    重建索引报错-python数据分析
    机器学习实战1-2.1 KNN改进约会网站的配对效果 datingTestSet2.txt 下载方法
    机器学习实战1-1 KNN电影分类遇到的问题
    权限掩码umask详解
    spark配置(7)--on yarn配置
    spark配置(6)-独立应用程序
    spark配置(5)-独立应用程序
    spark配置(4)-----Spark Streaming
    spark配置(3)
    spark配置(2)
  • 原文地址:https://www.cnblogs.com/25miao/p/10389330.html
Copyright © 2020-2023  润新知