• 简单工厂模式


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

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

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

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

     /// <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#语言中,不能通过类的实例来访问静态方法和静态变量,无法在客户端代码代码中针对工厂父类编程,而在运行时使用工厂子类对象覆盖父类。因此,工厂类不能很好拓展。

    适用环境:

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

  • 相关阅读:
    jwt的简单使用
    使用golang对海康sdk进行业务开发
    产品项目开发流程
    Unity在场景切换之间清理下内存
    Unity3d中第三人称摄像机跟随的实现
    unity3d中利用网格去绘制血条
    java内存泄露原因简单总结
    线程安全的多参构建器实现
    java单例模式,多线程下实现
    forward和redirect的简单区别
  • 原文地址:https://www.cnblogs.com/aqgy12138/p/12347046.html
Copyright © 2020-2023  润新知