Шаблон Creator Java

Существует большая вероятность того, что класс проще, если он будет большую часть своего жизненного цикла ссылаться на создаваемые объекты.

После определения информационных экспертов следует определить классы, ответственные за создание нового экземпляра некоторого класса. Следует назначить классу B обязанность создавать экземпляры класса A, если выполняется одно из следующих условий:

· класс В агрегирует (aggregate) объекты А;

· класс В содержит (contains) объекты А;

· класс В записывает или активно использует (records or closely uses) экземпляры объектов А;

· классы B и A относятся к одному и тому же типу, и их экземпляры составляют, агрегируют, содержат или напрямую используют другие экземпляры того же класса;

· класс В содержит или получает данные инициализации (has the initializing data), которые будут передаваться объектам А при его создании.

Если выполняется одно из указанных условий, то класс В – создатель (creator) объектов А.

Инициализация объектов – стандартный процесс. Грамотное распределение обязанностей при проектировании позволяет создать слабо связанные независимые простые классы и компоненты.

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

Поскольку объект LineRequestQuest использует объект Quest, согласно шаблону Creator он является кандидатом для выполнения обязанности, связанной с созданием экземпляров объектов Quest. В этом случае обязанности могут быть распределены следующим образом:

clip_image002

Рис. 5.2. Пример реализации шаблона Creator

/* пример # 3 : шаблон Creator: Qest.java: LineRequestQuest.java :Test.java */

public class Test {

private int idTest;

private int numberQuest;

private String testName;

private int currentNumberQuest;

// реализация конструкторов и методов

}

public class LineRequestQuest {

private int questID;

public void answerQuest() {

// реализация

Vector q = new Vector();

q.add(makeRequest(параметры));

//

}

public Quest makeRequest(параметры) {

// реализация

return new Quest(параметры);

}

}

public class Quest{

private int idQuest;

private int testID;

public Quest() {}

// реализация конструкторов и методов

}

Шаблон Creator способствует низкой зависимости между классами (Low Coupling), так как экземпляры класса, которым необходимо содержать ссылку на некоторые объекты, должны создавать эти объекты. При создании некоторого объекта самостоятельно класс тем самым перестает быть зависимым от класса, отвечающего за создание объектов для него. Распределение обязанностей выполняется в процессе создания диаграммы взаимодействия классов.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100