Шаблон Expert Java

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

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

/*пример # 1 : шаблон Expert : LineRequestQuest.java :Test.java : Quest.java */

public class Test {//информационный эксперт

private int idTest;

private int numberQuest;

private String testName;

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

}

public class LineRequestQuest {

private int questID;

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

}

public class Quest {//информационный эксперт

private int idQuest;

private int testID;

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

}

Необходимо узнать количество вопросов из теста, на которые дан ответ, то есть число созданных объектов класса LineRequestQuest. Такой информацией обладает лишь экземпляр объекта Test, так как этот класс ответствен за знание общего количества вопросов в тесте. Следовательно, с точки зрения шаблона Expert объект Test подходит для выполнения этой обязанности, т.е. является информационным экспертом.

/*пример # 2 : шаблон Expert : Test.java */

сlass Test {

private int idTest;

private int numberQuest;

private String testName;

private int currentNumberQuest;

public int getCurrentNumberQuest() {

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

}

clip_image001

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

}

Рис. 5.1. Применение шаблона Expert

Преимущества следования шаблону Expert:

· сохранение инкапсуляции информации при назначении ответственности классам, которые уже обладают необходимой информацией для обеспечения своей функциональности;

· уклонение от новых зависимостей способствует обеспечению низкой степени связанности между классами (Low Coupling);

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

Однако назначение чрезмерно большого числа ответственностей классу при использовании шаблона Expert может привезти к получению слишком сложных классов, которые перестанут удовлетворять шаблонам Low Coupling и High Cohesion.

Вы можете следить за любыми ответами на эту запись через 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