设计模式-简单工厂模式

设计模式-简单工厂模式

定义:由一个工厂类根据传入参数,动态决定创建哪一个产品类(这些产品类继承自一个父类或接口)

结构:
Factory (工厂)
负责实现创建所有实例的内部逻辑,工厂类创建产品的方法可以被外界直接访问,一般定义为静态方法 (static),所以有时候也叫静态工厂方法。

Product (抽象、接口 产品)
简单工厂模式所创建的所有对象对应类的父类或接口

Concrete Product (具体产品)
简单工厂创建的目标

下面以一个汽车工厂为例,展示一个汽车工厂生产 小轿车、公共汽车、校车 的过程

首先定义汽车的 抽象父类、接口(二者均可)

    // 汽车接口
    public interface ICar
    {
        void Print();
    }

定义具体汽车产品的类

    // 小轿车
    public class SaloonCar : ICar
    {
        public void Print()
        {
            Console.WriteLine("这是小轿车");
        }
    }

    // 公共汽车
    public class Bus : ICar
    {
        public void Print()
        {
            Console.WriteLine("这是公共汽车");
        }
    }

    // 校车
    public class SchoolBus : ICar
    {
        public void Print()
        {
            Console.WriteLine("这是校车");
        }
    }

定义一个产品类型枚举

    //汽车类型枚举
    public enum CarType
    {
        //小轿车
        SALOON_CAR, 
        //公共汽车
        BUS,
        //校车
        SCHOOL_BUS,
    }

定义工厂类

    // 汽车简单工厂
    class CarSimpleFactory
    {
        // 方便外界直接调用,使用了静态方法
        public static ICar Create(CarType type)
        {
            ICar car = null;
            // 根据枚举类型创建不同的车
            switch (type)
            {
                case CarType.SALOON_CAR:
                    car = new SaloonCar();
                    break;
                case CarType.BUS:
                    car = new Bus();
                    break;
                case CarType.SCHOOL_BUS:
                    car = new SchoolBus();
                    break;
                default:
                    break;
            }

            return car;
        }
    }

工厂类使用如下

    public class Customer
    {
        public Customer()
        {
            // 创建一个小轿车
            ICar sallonCar = CarSimpleFactory.Create(CarType.SALOON_CAR);
            sallonCar.Print();

            // 创建一个公共汽车
            ICar bus = CarSimpleFactory.Create(CarType.BUS);
            bus.Print();

            // 创建校车
            ICar schoolBus = CarSimpleFactory.Create(CarType.SCHOOL_BUS);
            schoolBus.Print();
        }
    }

优点:
(1)工厂类对产品的创建进行了封装,包含了必要的判断逻辑,客户只要根据自己的需求传入不同的参数得到具体的产品。
(2)由于客户无需关心具体创建逻辑,避免了客户直接创建对象,客户无需知道具体的产品类名,降低了客户类与具体产品类的耦合。
(3)可以根据配置在不改变代码的情况下,动态的修改创建的具体产品类型。

缺点:
(1)工厂类集中了所有的创建逻辑,职责过重,一旦出现异常,整个系统将受到影响
(2)扩展困难,一旦需要增加新产品,不得不修改工厂逻辑,违法了设计模式的开闭原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值