Главная » Java, Структуры данных и алгоритмы » Модель Adapter примеры программ

0

Зачастую существуют классы, обладающие схожими с другими классами возможностями и имеющие лишь незначительные отличия. Например, выше рассматривался класс, который выполняет операции вставки и удаления в каталог объектов Person, и необходимо создать каталог, который содержит только объекты Student. Безусловно, можно переписать всю программу обработки каталога объектов Student, однако это лишняя потеря сил и времени. Вместо этого можно использовать модель Adapter для адаптации функций существующего класса таким образом, чтобы они соответствовали функциям вновь создаваемого класса.

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

Чтобы адаптировать каталог Person для работы исключительно с объектами Student, можно создать защищенные переменные экземпляра нового класса, использующего существующий родовой каталог, к результате чего только объекты определенного типа могут быть введены в каталог и удалены из него. В частности, чтобы адаптировать каталог, созданный для обработки объектов Person, можно написать простой класс Student- PairDirectory, с условием, что в каталоге должны содержаться только пары объектов Student, как показано во фрагменте кода 2.14. Подобный

класс-адаптер «конкретизирует» или «адаптирует» структуру данных родового каталога для работы только с парами объектов Student. Следует отметить, что в ходе выполнения метода findOther осуществляется приведение типа переменной.

Г* Класс каталога, содержащего пары объектов Student. 7 public class StudentPairDirectory {

protected PersonPairDirectory directory;

public StudentPairDirectory() {

directory = new PersonPairDirectory ();

}

public void insert(Student s, Student t) { directory.insert(s,t);

}

public Student findOther(Student s) { return (Student) directory.findOther(s);

}

public void remove(Student s, Student t) { directory.remove(s, t);

}

}

Фрагмент кода 2.14. Класс StudentPairDirectory, который адаптирует класс PersonPairDirectory из фрагмента кода 2.13

Результатом использования проектной модели Adapter является упрощенная и удобная процедура создания нового класса, который обладает практически теми же свойствами, что и исходный класс. При анализе данного решения можно отмЬтитё, что оно удлиняет существующую программу и выполняет два обращения к методу вместо одного (одно обращение — к методу с заданной сигнатурой, и еще одно — к методу внутри данного метода, непосредственно выполняющему вычисления). Таким образом, если структура данных нашего каталога не будет использоваться слишком часто, можно в каждом случае проводить явное приведение типа, не используя класс-адаптер. В том случае, если структура данных каталога будет использоваться многократно, в целях экономии и удобства лучше использовать класс-адаптер, как приведено выше в примере, в результате чего неявное приведение типа осуществляется внутри данного класса.

Более подробно применение адаптерной модели рассмотрим в п. 4.4.4.

Источник: Гудрич М.Т. Г93 Структуры данных и алгоритмы в Java / М.Т. Гудрич, Р. Тамассия; Пер. с англ. A.M. Чернухо. — Мн.: Новое знание, 2003. — 671 е.: ил.

По теме:

  • Комментарии