Паттерн проектирования Command(Комманда)
Поведенческий паттерн.
Основные тезисы:
- применяеться для объединения набора объектов действий единую комманду;
- этот паттерн ничего не порождает, он просто вызывает нужные методы для хранимых в нем действий, в зависимости от условий.
Применяеться: Undo/redo, транзакции, progress bar.
Пример:
Задача - создать приложения для запуска сервисов в ОС.
Реализация - для данной задачи применяем паттерн проектирования “комманда”.
Создадим класс, который будет запускать сервисы:
http://www.feodosian.com/.work/commandPattern/src/v0/servicesManager.phps
Создадим класс сервиса:
http://www.feodosian.com/.work/commandPattern/src/v0/Service/Squid.phps
Класс сервиса реализует паттерн “комманда”. У него есть методы start, stop и isRunned в которых инкапсулирована логика старта нашего сервиса, остановки нашего сервиса и проверки, того запустился ли он(проверка состояния), эти методы должны быть в любом классе сервиса(можно также создать интерфейс). В этих методах у нас описано поведение, этого сервиса при запуске и остановке, например в приведенном примере, если при старте не удался запуск хоть одной из комманд, вызывается метод метод stop у тех, что успели запуститься, тоесть фактически мы, благодаря общему интерфейсу для нашей комманды, реализовали простенькую транзакцию. В моем примере, когда сервис Squid стартует, то выполняеться обход всех комманд (объекты комманд добавлены в конструкторе класса, а их логика описана в классах Command_Squid и Command_Sarg - http://www.feodosian.com/.work/commandPattern/src/v0/Command/ ), добавленных в него и запуск их, если запуск хоть одной из них не удаеться, то происходит stop всех, что успели запуститься.
В чем “коммандность” данного решения - именно в том, что мы просто добавляем объекты комманд и те в свою очередь компонуються в сервис, который инкапсуриет в себе логику запуска или остановки, в зависимости от поведения своих комманд. Естественно, каждая из добавленных в сервис комманд может тоже реализовывать данный паттерн. Залог успеха - выбор единого стандарта для названия методов запуска и остановки сервиса и проверки его состояния.
Скачать:
http://www.feodosian.com/downloads/commandPatt…
Исходники онлайн:
http://www.feodosian.com/.work/commandPattern/src/v0/
В деле:
http://www.feodosian.com/.work/commandPattern/v0/
Ссылки:
http://en.wikipedia.org/wiki/Command_pattern
http://c2.com/cgi/wiki?CommandPattern
http://www.phppatterns.com/docs/design/the_command_pattern
З.Ы.
этот пост еще корректируеться и дополняеться.
Tags: php, дизайн приложений, разработка
Последние комменты