2016-11-03 3 views
0

Я пытаюсь использовать шаблон Factory Method для создания разных объектов, но у меня есть несколько сомнений. Позвольте мне показать вам сценарий:Несколько параметров в шаблоне Factory Method

public class ObjectFactory{ 

    public static IObject createObject(Param1 p1, Param2 p2, Param3 p3){ 
     if (p1.getName('name1')){ 
      return new Object1(p1,p2,p3); 
     }else{ 
      return new Object2(p1, p2); 
     } 
    } 
} 

public interface IObject{ 
    void doSomething(); 
} 

public class Object1 implements IObject { 
    public Object1(Param1 p1, Param2 p2, Param3 p3){} 
} 

public class Object2 implements IObject { 
    public Object1(Param1 p1, Param2 p2){} 
} 

Im немного путают с Param3 в методе CREATEOBJECT в ObjectFactory в. У меня всегда есть этот параметр, но иногда это бессмысленно. Мне это не нравится, потому что если в какой-то день я добавлю больше объектов с разными параметрами, мне нужно будет добавить слишком много параметров в подпись метода.

Я думал в определении: общественности статической IObject CreateObject (Param1 p1, p2 Param2, Param3 p3) общественности статической IObject CreateObject (Param1 p1, p2 Param2) , но тогда это не фабричный метод шаблон, потому что invoker должен знать, какой метод должен быть выполнен.

Знаете ли вы, что вы имеете дело с этим?

Заранее спасибо.

+0

Взгляните на образец строителя: https://en.wikipedia.org/wiki/Builder_pattern –

ответ

0

Вы уверены, что завод действительно упрощает дизайн? Пример вашего примера использования очень абстрактный, поэтому его трудно сказать, но если клиент уже должен знать различные зависимости явно, возможно, вы также должны позволить ему выбрать реализацию?

Если вы обнаружите, что передаете тип объекта, который клиент хочет (как перечисление или строка) на заводе, то, скорее всего, вы не должны использовать фабрику вообще, если не существует нескольких реализаций для каждого типа. Существуют исключения, но это может служить руководством.

Однако, возможно, клиент знает конфигурацию, но не знает и не должен знать, как это переводится в реализацию. В этом случае использование Builder Pattern может упростить ваш API, если у вас много перестановок параметров конфигурации.

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