Java中的工厂模式示例

时间:2012-04-04 11:34:55

标签: java design-patterns

我在工厂模式中尝试了一个例子。这给了我ArrayIndexOutOfBoundsException。有人能解释一下吗

java.lang.ArrayIndexOutOfBoundsException: 0 at com.factory.SalutationFactory.main(SalutationFactory.java:10) 

这是我的课程。

package com.factory;

public class SalutationFactory {

    public static void main(String[] args) {

        try
        {
        SalutationFactory factory = new SalutationFactory();        
        factory.getPerson(args[0], args[1]);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    public Person getPerson(String name, String gender){

        if(gender.equals("M"))
            return new Male(name);
        else if(gender.equals("F"))
            return new Female(name);
        else 
            return null;
    }
}

package com.factory;

public class Person {

    private String name;
    private String gender;

    public String getName(){
        return name;
    }

    public String getGender(){
        return gender;
    }

}

package com.factory;

public class Female extends Person {

    public Female(String fullname){
        System.out.println("Hello Ms " + fullname);
    }
}

package com.factory;

public class Male extends Person {

    public Male(String fullname){
        System.out.println("Hello Mr " + fullname);
    }

}

由于 开发

4 个答案:

答案 0 :(得分:4)

因为这是使用数组的唯一一行:

 factory.getPerson(args[0], args[1]);

我怀疑你没有提供2个命令行参数。你需要这样的东西:

$ java com.factory.SalutationFactory Smith M

答案 1 :(得分:2)

factory.getPerson(args[0], args[1]);

这里使用命令行参数,因此在运行此应用程序时,您必须传递命令行参数

使用

运行
java SolutionFactory Santosh M

此处 Santosh 将分配到 args [0] M 将分配给 args [1]

如果没有传递任何命令行参数,你运行这个程序,那么 args的长度并且在 main()里面你正在调用 args [0] ,这会导致 ArrayIndexOutOfBounds 异常

答案 2 :(得分:0)

我尝试了相同的示例,在尝试此处之后是解决方案。创建此代码。

String []pin =new String[4];
    pin[0]="M";
    pin[1]="F";
    Factory factory = new Factory();
    factory.getPerson(pin[0],pin[1]);

这将起作用

你的出局应该是“女性”。

答案 3 :(得分:0)

在使用它们之前,您必须检查null或对象。只需添加一行

即可
if (args.length >= 2)
    factory.getPerson(args[0], args[1]);
/* else 
    Add reminder to provide at least 2 arguments. */