专业编程基础技术教程

网站首页 > 基础教程 正文

浅谈23种设计模式C#(2)- 工厂方法模式

ccvgpt 2024-08-16 15:05:49 基础教程 9 ℃

首先了解一下简单工厂模式(Simple Factory Pattern),它有一个专门的类来负责创建实例,根据输入参数来决定创建哪一种具体产品类的实例,被创建的实例类通常会实现一个抽象类或接口。


    public interface ICar
    {
        /// <summary>
        /// 汽车名称
        /// </summary>
        /// <returns></returns>
        string GetCarName();
        /// <summary>
        /// 发动机型号
        /// </summary>
        /// <returns></returns>
        string GetEngineModel();
    }

    public class DaZhong : ICar
    {
        public string GetCarName()
        {
            return "大众汽车";
        }
        public string GetEngineModel()
        {
            return "EA211";
        }
    }

    public class ChangAn : ICar
    {
        public string GetCarName()
        {
            return "长安汽车";
        }
        public string GetEngineModel()
        {
            return "GW4G15F";
        }
    }

    public enum CarType
    {
        /// <summary>
        /// 大众
        /// </summary>
        DaZhong, 
        /// <summary>
        /// 长安
        /// </summary>
        ChangAn
    }
    /// <summary>
    /// 简单工厂
    /// </summary>
    public class CarSimpleFactory
    {
        /// <summary>
        /// 根据变量名称创建具体的产品
        /// </summary>
        /// <param name="carType"></param>
        /// <returns></returns>
        public static ICar? CreateCar(CarType carType)
        {
            switch (carType)
            {
                case CarType.DaZhong:
                    return new DaZhong();
                case CarType.ChangAn:
                    return new ChangAn();
                default:
                    return null;
            }
        }
    }
// 调用简单工厂
ICar? car1 = CarSimpleFactory.CreateCar(CarType.DaZhong);
ICar? car2 = CarSimpleFactory.CreateCar(CarType.ChangAn);
if (car1 != null)
{
    car1.GetCarName();
    car1.GetEngineModel();
}
if (car2 != null)
{
    car2.GetCarName();
    car2.GetEngineModel();
}

工厂方法模式(Factory Method Pattern)解决了简单工厂模式不符合开闭原则的缺点,工厂方法模式是一种创建型设计模式,定义了一个用于创建具体产品对象的接口,将创建过程推迟到子类中完成。

浅谈23种设计模式C#(2)- 工厂方法模式

    /// <summary>
    /// 工厂接口
    /// </summary>
    public interface ICarFactory
    {
        ICar CreateCar();
    }
    /// <summary>
    /// 具体工厂-大众
    /// </summary>
    public class DaZhongFactory : ICarFactory
    {
        public ICar CreateCar()
        {
            return new DaZhong();
        }
    }
    /// <summary>
    /// 具体工厂-长安
    /// </summary>
    public class ChangAnFactory : ICarFactory
    {
        public ICar CreateCar()
        {
            return new ChangAn();
        }
    }
    
// 调用工厂方法
ICarFactory carFactory1 = new DaZhongFactory();
ICar car3 = carFactory1.CreateCar();
car3.GetCarName();
car3.GetEngineModel();

ICarFactory carFactory2 = new ChangAnFactory();
ICar car4 = carFactory2.CreateCar();
car4.GetCarName();
car4.GetEngineModel();

最近发表
标签列表