工厂模式的真正优势

时间:2013-05-28 13:12:42

标签: java design-patterns

我一年以来一直在使用工厂模式。有时我只觉得真正的优势就是干净的代码。让我解释一下,

interface A {

    public void test();
}

class B implements A {
    public void test() {

    }
}

class C implements A {
    public void test() {

    }
}

class Factory {
    public static A getObject(String name){
        if(name.equalsIgnoreCase("B")){
            return new B();
        }else if(name.equalsIgnoreCase("C")){
          return new C();
        }
        return new B(); 

    }
}

public class Test {

    public static void main(String[] args) {
        A a = Factory.getObject(args[0]);

        // if i dint use factory pattern
        A nofactory=null;
        if(args[0].equalsIgnoreCase("B")){
            nofactory= new B();
        }else if(args[0].equalsIgnoreCase("C")){
            nofactory= new C();
        }
    }
}

从上面的代码我觉得工厂模式只是美化代码,如果我的理解错误,请告诉我。

3 个答案:

答案 0 :(得分:2)

如果接口A和类BC在库中,并且您的代码是使用该库的主要方法,则表示类D,{可以将{1}}等添加到库中,您可以在不更改代码的情况下使用它们。选择使用哪个实现的责任移到了库中。

此外,您的示例非常简单。其他时候输入可能比完全匹配类型的字符串更复杂。输入可以是具有特定格式的文件,例如需要读取某个实现。

答案 1 :(得分:1)

而不是美化考虑以下示例

说你正在实施测试类,而你的合作伙伴正在实施B,C,D ....(其他你不知道的人)..你怎么能管理这个?

工厂模式可以帮助您编写应用程序的一部分,而无需了解其他部分。

答案 2 :(得分:0)

我认为在DP书中有 Intent 部分,它比模式结构本身更重要。 你的样本很简单。在更复杂的情况下,工厂可帮助您填充创建详细信息。 拿你的样品。想象一下,你的代码中散布着“新的B()”和“新的C()”。 然后,您需要将 B 更改为 SuperB 类型,您必须在代码的每个位置更改它。 在工厂,您只能在一个地方更改它。