现在的位置: 首页 > 综合 > 正文

从细节中发现问题

2013年11月04日 ⁄ 综合 ⁄ 共 1661字 ⁄ 字号 评论关闭

在做.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();
            }


        }

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

 

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

       

三种工厂模式对比:

 

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

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

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

举例说明:

 

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

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

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

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

抱歉!评论已关闭.