简单工厂模式

简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。

这是它的概念这么看,肯定也没看懂啥,那就直接上源码吧。。

场景:我有一个工厂,然后我有电脑、手机两个产品,他们我都能生产,他们有些零件是都能用的,但是现在有商家要我生产电脑、有商家要我生产手机,但是我也不知道这个商家到底需要什么,所以我想知道商家到底需要生产什么 ,比如给我发给消息什么的让我知道。

首先来个产品基类,这个里面呢,我要生产零件

 /// <summary>
    /// 首先声明一个产品父类
    /// </summary>
    public abstract class Product
    {
        /// <summary>
        /// 声明公共方法
        /// </summary>
        public void Production()
        {
            Console.WriteLine("生产零件");
        }
        /// <summary>
        /// 我这个产品具体是干嘛的
        /// </summary>
        public abstract void WhatProduction();
    }

然后我的手机产品

 /// <summary>
    /// 我有一个手机的产品
    /// </summary>
    public class Phone : Product
    {
        public override void WhatProduction()
        {
            Console.WriteLine("生产手机");
        }
    }

再来一个电脑的 

   /// <summary>
    ///一个电脑产品
    /// </summary>
    public class Computer : Product
    {
        public override void WhatProduction()
        {
            Console.WriteLine("生产电脑");
        }
    }

现在再来个接受商家信息的工厂类

 public  static class Factory
    {
        public static Product GetProduct(string productName)
        {
            Product product = null;
            if (productName.Equals("电脑"))
            {
                product = new Computer();
            }
            else if (productName.Equals("手机"))
            {
                product = new Phone();
            }
            return product;
        }
    }

现在有个商家要我生产电脑。。。

 class Program
    {
        static void Main(string[] args)
        {
            {
                //简单工厂模式
                Product product = Factory.GetProduct("电脑");
                product.Production();
                product.WhatProduction();
            }
            Console.ReadKey();
        }
    }

再来看一下打印的结果

 同理我想生产手机,那我输入手机就行了。

上代码之后这个简单工厂模式还是容易理解的。其实我们平时用switch也是可以的,我平常可能写过这样的代码但是不知道这种类型的处理叫啥名字,希望这个博客能够帮需要的人解惑。

那么凡事都有利弊,

优点:

1.简单工厂模式实现了对象的创建和使用的分离,这个从代码是能够看出的,我在Factory里面创建对象,而在Mian方法中使用对象。

2.只需要对应的参数就能够生产不同的产品。

3.这个其实是书上说的一个好处,读取配置文件的参数能够让代码符合开闭原则,配置文件大家都知道的,我要用啥,配置文件里面改一下就行了。也不用在代码里面改了。

缺点:

1.由于工厂类集中了所有产品的创建逻辑,职责过重。

2.使用简单工厂模式势必会增加系统中类的引用个数(引入了新的工厂类),增加了系统的复杂度和理解难度。

3.系统扩展难,一旦添加新的产品,那就需要修改逻辑,比如我们工厂可以造直升机了呢,那不得又要改代码

4.简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级接口,在c#语言中,不能通过类的实例来访问静态方法和静态变量,无法在客户端代码代码中针对工厂父类编程,而在运行时使用工厂子类对象覆盖父类。因此,工厂类不能很好拓展。

适用环境:

其实看了他的优缺点,很容易得出结果,这种模式只能在处理的东西比较少的时候比较好用,其他的复杂情况并不适用。

原文地址:https://www.cnblogs.com/aqgy12138/p/12347046.html