0 0

用创建工厂时,有的实例有参数有的没有,如何解决(描述不是很清楚,具体看代码)5

标题没有把问题讲清楚是这样的大家看一下就例子就明白了。

public static class Factory
{
    public static Product CreateProduct(string type)
    {
        if(!IsRightType(type))
        {
            throw new Exception();
        }
        
        if(type == "1")
        {
            return new ProductType1();
        }

        if(type == "2")
        {
            return new ProductType2();
        }
    }

    public static Product CreateProduct(string type, string color)
    {
        if(!IsRightType(type))
        {
            throw new Exception();
        }

        if(type == "2")
        {
            return new ProductType2(color);
        }

        throw new Exception();
    }
}


代码也就是这样的,用创建工厂来返回实例,如果类型是不支持的就抛出异常。

但是问题来了,有的实例需要一个参数,而有的实例不需要这个参数,所以需要增加这个参数的创建工厂的方法的有参数重载了。而在使用的时候如果不清楚创建的实例是否需要这个参数,而将不需要这个参数的类型添加了这个参数,带参数的重载的方法就不能返回正确的实例。

我在这里做的就是如果没有不能返回带参数的实例就抛出一个异常给出提示,但这样的话就降低了这个API的易用性了,不知道有没有更好的方法。

如果在这个有参数的重载方法中返回相应的不需要参数的实例的话可以不用抛出异常,但是会跟使用API的人起到误导作用,误以为这个实例需要这个参数。而实际上是不需要的。
2008年10月14日 18:55
目前还没有答案

相关推荐

    c++设计模式 描述c++常用设计模式

    - 当这个唯一实例应该是通过子类化可扩展的,并且客户端应该无需修改代码就能使用一个扩展的实例时。 ##### 1.4 Builder模式 Builder模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示...

    cpp设计模式mini版

    这些模式并不是具体的代码,而是描述了解决特定问题的一般性方法。本文主要介绍了一种精简版的设计模式,即“cpp设计模式mini版”,聚焦于设计模式的核心思想而非复杂的实现细节。 ### 创建型模式 创建型模式关注...

    关于hibernate的实例

    【描述】:“这是本人对hibernate做的实例,能够清楚地解释hibernate的内容,也许对您有所启发” 在这个实例中,我们将深入探讨Hibernate,一个流行的Java对象关系映射(ORM)框架,它简化了数据库操作,将复杂的...

    超级有影响力霸气的Java面试题大全文档

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java....

    C#23种设计模式_示例源代码及PDF

    工厂方法模式: 而是将具体创建的工作交给子类去做, 工厂方法模式 核心工厂类不再负责所有产品的创建, 成为一个抽象工厂角色, 仅负责给出具体工厂类必须实现的接口, 而不接触哪一个产品类应 当被实例化这种细节...

    effective c++中文第三版

    2. **工厂模式**:通过定义一个用于创建对象的接口,但让子类决定实例化哪一个类,这可以将对象的实例化过程与使用这些对象的过程解耦。 3. **观察者模式**:用来定义对象间的一对多依赖关系,当一个对象的状态发生...

    设计模式:可复用面向对象软件的基础--详细书签版

     本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...

    java设计 原则61条

    在第33页中提到,虽然设计模式可以解决很多常见的问题,但是过度使用模式可能会导致代码变得更加复杂。 **原则17:适度重构以优化设计** 在第36页提到,随着时间的推移和技术的发展,原有的设计可能不再适用,这时...

    《设计模式可复用面向对象软件的基础》

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

Global site tag (gtag.js) - Google Analytics