Журнал LinuxFormat - перейти на главную

LXF94:Команды и фабрики

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(→‎Команды)
(Перенаправление на LXF94:Java EE)
 
(не показаны 13 промежуточных версий 1 участника)
Строка 1: Строка 1:
−
== Команды и фабрики ==
+
#REDIRECT [[LXF94:Java EE]]
−
''ЧАСТЬ 6 '''Антон Черноусов''' готов познакомить вас с очередной партией паттернов, которые помогут сделать ваши приложения еще более гибкими и расширяемыми.''
+
−
 
+
−
=== Вместо предисловия ===
+
−
 
+
−
В предыдущей статье мой коллега Александр Бабаев рассмотрел вопросы организации и использования БД в Java-приложениях, и в том числе вопросы подключения к БД посредством ConnectionPool.
+
−
 
+
−
Сегодня мы рассмотрим применение двух паттернов, безусловно, оказавших огромное воздействие на проектирование систем – Command и Factory Method. Их применение позволит сделать ваше приложение расширяемым.
+
−
 
+
−
=== Команды ===
+
−
 
+
−
В LXF92 мы кратко описали стратегии, предназначенные для реализации «Контроллера», и обещали более подробно рассмотреть стратегию Command and Controller. Чтобы выполнить это обещание, нам придется сначала познакомиться с паттерном Command.
+
−
 
+
−
Задача, которая стоит перед контроллером (сервлетом) при получении управляющего сигнала, как правило, заключается в выполнении последовательности действий, часто атомарной (т.е. обрабатываемой как единое целое). Например, в сервлете AddressBookServlet, реализованном в предыдущей статье, метод handleEdit вызывается, когда адрес на который обращается пользователь – это “/edit”.
+
−
 
+
−
К сожалению, на примере AddressBookServlet мы видим, что при увеличении функциональности web-приложения растёт и количество методов, реализованных в сервлете; класс «засоряется», код становится менее структурированным и читабельным. Решить проблемы с кодом можно, «обернув» методы в специальные классы, которые будут выполнять атомарные операции и предоставлять сервлету стандартный интерфейс, предназначенный для этих целей. Для выполнения поставленной задачи воспользуемся паттерном Command.
+
−
 
+
−
Команды удобны прежде всего тем, что они маскируют конкретную реализацию, находящуюся за интерфейсной прослойкой. Интерфейс остается одним и тем же, независимо от того, с чем работает команда [1].
+
−
 
+
−
public interface Command {
+
−
    public void execute() throws Exception;
+
−
}
+
−
 
+
−
Выше представлен простой интерфейс Command всего с одним методом execute(), который и олицетворяет идею одноименного паттерна. Он будет нашим стандартым интерфейсом. Более сложная реализация интерфейса включает метод unexecute(). Класс, реализующий интерфейс Command, инкапсулирует в методе execute() обозначенные выше атомарные операции, а в методе unexecute() реализуется механизм отмены. Часто методы execute() и unexecute() называют do() и undo(), соответственно.
+
−
 
+
−
Выделим команды, которые нам необходимо реализовать (отметим удачное разделение на методы): Add, Auth, Edit, View, Remove. Учитывая то, что у наших команд будут некоторые идентичные методы и атрибуты, предлагаю создать абстрактный класс AbstractHTTPCommand, в котором они будут собраны. Класс будет реализовывать интерфейс Command, и его наследование автоматически позволит обеспечить необходимый уровень интеграции. Итак, в основе каждой команды будет лежать абстрактный класс AbstractHTTPCommand, в котором реализован интерфейс для выполнения операций (на Рис. 1 вы можете видеть диаграмму классов команд нашего приложения).
+
−
 
+
−
[[Image:Java 6 1.jpg|left|300px|trumb|Рис. 1. Диаграмма классов.]]
+
−
 
+
−
=== Хранение настроек команд ===
+
−
 
+
−
 
+
−
 
+
−
=== Создание экземпляра класса по имени ===
+
−
 
+
−
 
+
−
 
+
−
=== Фабрика команд ===
+
−
 
+
−
 
+
−
 
+
−
=== Что дальше? ===
+
−
 
+
−
 
+
−
----
+
−
 
+
−
== Литература ==
+
−
 
+
−
#Тейт, Б. Горький вкус Java: Библиотека программиста. – СПб: Питер, 2003. – 333 с.
+
−
#Мартин, Р.С. Быстрая разработка программ: принципы, примеры, практика. – М.: Издательский дом «Вильямс», 2004. – 752 с.: ил.
+

Текущая версия на 11:32, 22 марта 2008

  1. REDIRECT LXF94:Java EE
Персональные инструменты
купить
подписаться
Яндекс.Метрика