2015-11-06 5 views
1

Я имею следующую структуру класса:Есть ли лучший способ реализовать простой Factory с двумя условиями?

MyClass 
    FirstClass 
    FirstClassVersion1 
    FirstClassVersion2 
    SecondClass 
    SecondClassVersion1 
    SecondClassVersion2 

В определенный момент мне нужна ссылка на MyClass в соответствии с номером класса и классом версией, поэтому я создал простой завод. Но мой завод немного сложный, как следует:

public class MyClassFactory { 

    public static MyClass createMyClass(int classNumber, int classVersion) throws Exception { 
     if (classNumber == 1) { 
      if (classVersion == 1) { 
       return new FirstClassVersion1(); 
      } else if (classVersion == 2) { 
       return new FirstClassVersion2(); 
      } 
     } else if (classNumber == 2) { 
      if (classVersion == 1) { 
       return new SecondClassVersion1(); 
      } else if (classVersion == 2) { 
       return new SecondClassVersion2(); 
      } 
     } 

     throw new Exception("..."); 
    } 
} 

Есть ли лучший способ сделать это?

ответ

2

Вот еще одна идея:

public class MyClassFactory { 

    private MyClassFactory instance = new MyClassFactory(); 

    private MyClassFactory() {} 

    public MyClassFactory getInstance() { return instance; } 

    public MyClass create(Class clazz) throws Exception { 
     return clazz.newInstance(); 
    } 
} 

приукрасить это по мере необходимости (например, проверки сильных типа с использованием дженериков).

Ваш путь требует, чтобы вы изменяли завод каждый раз, когда расширяете класс. Это не может масштабироваться.

Смежные вопросы