Кто отвечает за настройку свойств объекта? - PullRequest
1 голос
/ 16 декабря 2009

У меня есть объект с полями. В проекте мне нужен этот объект, заполненный информацией.

кто несет ответственность за заполнение этого объекта?

Я бы хотел метод, подобный getFilledObject (), который возвращает полностью заполненный объект в мою программу.

Я могу поместить эту логику в основной поток и заполнить ее «на месте», также я могу добавить этот метод в сам класс, чтобы он знал, как заполнить себя в соответствии с параметрами, которые я передаю. Последнее решение достаточно хорошее, единственная проблема в том, что класс должен знать о его природе гораздо больше, чем простой простой класс get-set.

Но я чувствую, что ни одно решение не является достаточно хорошим. Что это должно быть? Вспомогательный класс, который содержит только логику для заполнения объекта?


Вы знаете, да, Фабрика - это то, что я искал, но это всегда упоминается вместе с полиморфизмом. В моем случае мне это вообще не нужно. Таким образом, я могу назвать это фабрикой, но действительно ли это будет то, что они назвали «Фабричный образец»?

Так что мы имеем в результате? во-первых, статический фабричный метод

class A {
ObjType1 obj1;
ObjType2 obj2;

public A() {}

public static getA(int param1, int param2) {
  A a = null;
  ObjType3 obj3 = null; 
  if (somelib.complexCheck(param)) {
    obj3 = someotherlib.getSomething(param2);
    // other stuff
  }
  if (obj3 != null) {
    // do something with getters & setters, fill a
  }
  return a;
}

и фабричный шаблон или что-то похожее на него

class Fact {
 public static A getA(int param1, int param2) {
   // do all that stuff here
 }
}

разница, на мой взгляд, состоит в большом количестве директив импорта в классе A в случае статического фабричного метода . Кроме того, мы можем поместить аналогичные статические методы в класс Fact, если всем им нужны одинаковые библиотеки.

Что бы вы выбрали между двумя?

Ответы [ 4 ]

3 голосов
/ 16 декабря 2009

Вспомогательный класс, который содержит только логика для заполнения объекта

называется фабричным классом . Похоже, это то, что вам нужно.

Также взгляните на Внедрение зависимостей .

1 голос
/ 16 декабря 2009

Джошуа Блох обсуждает Статические фабрики и шаблон Builder в этом отрывке из второго издания своей книги Effective Java .

1 голос
/ 16 декабря 2009

Откуда эта информация? Это жестко / согласованно? Используйте конструктор объекта . Это переменная или она поступает из хранилища данных? Используйте шаблон DAO .

0 голосов
/ 16 декабря 2009

Относительно вашей последней фразы: «Так что я могу назвать это фабрикой, но действительно ли это будет то, что они назвали« Фабричная модель »?
ИМХО, шаблоны - это просто пища для размышлений. Не беспокойтесь слишком сильно, если то, что вы делаете, соответствует точному определению из учебника (которое все равно оспаривается) или нет. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...