从细节中发现问题

来源:互联网 发布:php swoole 视频直播 编辑:程序博客网 时间:2024/04/29 18:09

在做.net机房收费系统画图阶段,重新认识了一下简单工厂与抽象工厂!

从细节处看出它们的不同应用

 

下面写一下简单工厂的工厂类:

 class CashFactory    {        public static CashSuper createCashAccept(string type)        {            CashSuper cs = null;            switch (type)            {                case "正常收费":                    cs = new CashNormal();                    break;                case "满300返100":                    CashReturn cr1 = new CashReturn("300", "100");                    cs = cr1;                    break;                case "打八折":                    CashRebate cr2 = new CashRebate("0.8");                    cs = cr2;                    break;            }            return cs;        }

    在创建工厂时使用了参数,目的是根据参数来实例化具体类,解决的是一个功能有多种实现,且我需要将不同的实现均实例出来.应用时,我创建的这些实例都可能应用的到.

    以前我的理解是抽象工厂是简单工厂的延续,理所当然的抽象工厂也能解决简单工厂的问题,但是真的用的时候,发现并不是如此,大家看看代码:


抽象工厂:       

 //IFactory接口        interface IFactory        {            Iuser createUser();  IDpartment CreateDepartment();        }        //SQLServerFactory类,实现IFactory接口,实例化SQLServerUser        class SQLServerFactory : IFactory        {            public Iuser createUser()            {                return new SQLServerUser();            }   public IDepartment createDepartment()   {       return new SQLServerUser();   }        }        //AccessFactory类,实现IFactory接口,实例化AccessUser        class AccessFactory : IFactory        {            public Iuser createUser()            {                return new AccessUser();            }                 public IDepartment createDepartment()            {                return new AccessDepartment();            }        }


    抽象工厂没有使用参数,解决的是一个功能我只需要一种实现方式的问题,虽然我有多种实现的方法,但是在使用时我只需要选择其一.应用时,我只需要将我想创建的实例创建出来即可,不使用的实例可以不创建.它主要解决整个功能有两种不同的实现,在用的过程中只选择其中的一种!

 

   通过这个细节又让我想到当时总结的设计模式之工厂模式,下面我再将三种工厂模式的比较贴过来和大家分享:

       

三种工厂模式对比:

 

简单工厂:简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。

工厂方法:工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。

抽象工厂:抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。


举例说明:

 

  简单工厂的由来:以前都是我自己生产自己的汽车(自产自用),这样的话我和汽车之间就是强耦合,没有我就没办法生产。

   简单工厂:一个汽车公司将各种各样的汽车生产都放在了一个工厂里实现(工厂只负责生产,我只负责使用,降低了我和汽车之间的耦合)

   工厂方法:汽车公司将不同种的汽车在不同的工厂内实现.例如:轿车在生产轿车的工厂生产,汽车在生产汽车的工厂生产等(增加新的产品)。

   抽象工厂:一个汽车公司同时生产汽车,轿车,客车,那么这个汽车公司的每个工厂都要实现生产汽车,轿车,客车的方法。当我要生产各种汽车的不同品牌时,则需要使用抽象工厂模式。也就是产品族的概念。(增加产业线)



原创粉丝点击