设计模式之简单工厂模式

        简单工厂模式:又叫静态工厂方法(Static Factory Method)模式,严瑾的说,简单工厂模式不算设计模式中的一种,之所以拿出来说是因为有很多模式都是从简单工厂模式衍生过去的,所以先来介绍一下简单工厂模式,方便为介绍其他模式的时候做铺垫,这是小编尝试着用生活中的例子来介绍,如有不恰当之处,希望大家在评论中给出,如果觉得不错,请记得为小编点个赞,谢谢~。

        简单工厂模式的UML类图如下:


        对于初学者来说,看到这个模式就立马和小伙伴们都惊呆了,WTF,这是什么鬼怎么看出它是简单工厂的,然后这是干嘛的呢?不过在小编这篇博客中,这些你都不用担心,小编会给读者慢慢全部道来。

        小编比较喜欢开车,所以对车方面非常感兴趣,这次小编就用宝马汽车举个例子,如下图:


        这个应该比上面那个好看一些了吧,并不是结构变了,而是将它化了个“装”,既然看到类图了,那么例子也应当举出来,是吧!如下,先有一家工厂:


        有了这个工厂之后,就说明在这个工厂中能够生产出这四款宝马车型,这个时候就有客户来看车型,销售人员将各款车的性能、加速度、前后驱动、乘坐舒适度、价格等等一切考量车性价比的因素给介绍完成之后,然后客户根据自己的需求和用处,找到一台最好看的买下,于是通知工厂生产出一台客户想要的。代码在下文中慢慢介绍:

        首先:车子的各方面信息需要实现准备好,那样销售人员好给客户介绍,这个时候就需要建立一个属性类,如下:

    Private Product _宝马五系 = 0 ;   //定义属性
    Private Product _宝马X6 = 0 ;
    Private Product _宝马I8 = 0;
    Private Product _宝马Z4 = 0;

    Public Product宝马五系           //定义宝马五系的属性
    {
          get{return _宝马五系;}
          set{_宝马五系 = value;}
     }
    Public Product 宝马X6            //定义宝马X6的属性
    {
          get{return _宝马X6;}
          set{_宝马X6 = value;}
     }
    Public Product 宝马I8            //定义宝马I8的属性
    {
          get{return _宝马I8;}
          set{_宝马I8 = value;}
     }
    Public Product 宝马Z4            //定义宝马Z4的属性
    {
          get{return _宝马Z4;}
          set{_宝马Z4 = value;}
     }

        其次,这是一个宝马工厂,所以必须要有一个工厂来生产产品,所以这个时候就需要建立一个工厂类:

Public class BMWFactory
{
    Public static Production createOperate(string Product)
    {
        Production Prod = null;
        Switch (Product) 
        {
            case "宝马五系" :
                Prod = new 宝马五系();
                Break ;
            case "宝马X6" :
                Prod = new 宝马X6();
                Break ;
            case "宝马I8" :
                Prod = new 宝马I8();
                Break ;
            case "宝马Z4" :
                Prod = new 宝马Z4();
                Break ;
        }
        Return Prod ; 
    }
}

        这个时候工厂和汽车的属性都有了,那么客户就可以选择汽车了,所以针对客户这方面的代码是:

Production Car ;
Car = BMWFactory . createOperate("宝马I8");
String result = Prod.GetResult();

        最后,销售人员来客户买好制订的汽车之后立即通知工厂给客户生产,工厂也应当将所生产出来的汽车信息显示给客户知道,所以就有了如下这些代码:

class Production 宝马五系:BWM
{
    public override Product GetResult()
    {
        result String;
        result = Console.ReadLine();
        Console.WriteLine("生产宝马五系汽车{0}台",result)
    }
}
class Production 宝马X6:BWM
{
    public override Product GetResult()
    {
        result String;
        result = Console.ReadLine();
        Console.WriteLine("生产宝马X6汽车{0}台",result)
    }
}
class Production 宝马I8:BWM
{
    public override Product GetResult()
    {
        result String;
        result = Console.ReadLine();
        Console.WriteLine("生产宝马I8汽车{0}台",result)
    }
}
class Production 宝马Z4:BWM
{
    public override Product GetResult()
    {
        result String;
        result = Console.ReadLine();
        Console.WriteLine("生产宝马Z4汽车{0}台",result)
    }
}

        这就是简单工厂的所有代码。

        简单工厂模式的核心是:客户需要什么,就给工厂传去需要什么的信息,工厂在接收到需求的信息之后立马生产,然后生产出来客户所需要的产品之后立马通知客户。就是这么一个过程。

        简单工厂的优点:工厂类是整个模式的关键,包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建那个具体类的对象,通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费者”就可以了,而不必管这些对象究竟如何创建及如何组织的,明确了各自的职责和权利,有利于整个软件体系结构的优化。

        简单工厂模式的缺点,由于工厂类集中了所有实力的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中,他所能创建的类只能是先考虑的,如果需要添加新的类,则就需要改变工厂类。当系统中的具体产品不断增多时候,可能会出现要求工厂类根据不同条件创建不同势力的需求,这种对条件的判断和具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利,于是针对这些缺点,真正的设计模式:工厂方法模式就出来了,详情请见博主下一篇博客:设计模式之工厂方法模式。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值