5

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

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

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

4

3 回答 3

2

如果 interface和Aclasses都在一个库中,并且您的代码是使用该库的主要方法,这意味着可以将 classes等添加到库中,您可以在不更改代码的情况下使用它们。选择使用哪个实现的责任转移到了库中。BCDE

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

于 2013-05-28T13:17:31.683 回答
1

而不是美化考虑以下示例

假设您正在实施测试类,而您的合作伙伴正在实施 B、C、D ....(您不知道的其他人)..您如何管理这个?

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

于 2013-05-28T13:26:38.277 回答
0

我认为在 DP 书中有比模式结构本身更重要的Intent部分。你的样本是微不足道的。在更复杂的情况下, Factory可以帮助您封装创建细节。拿你的样品。想象一下你的代码周围散布着“new B()”和“new C()”。然后你需要改变BSuperB类型,你必须在代码的每个地方都改变它。在 Factory 中,您只能在一处进行更改。

于 2013-05-28T13:35:50.050 回答