Читайте также:
|
|
void TCPClosed::PassiveOpen (TCPConnection* t) { ChangeState(t, TCPListen::Instance)));
void TCPEstablished::Close (TCPConnection* t) { // послать FIN, получить АСК для FIN
ChangeStateft, TCPListen::Instance)));
void TCPEstablished::Transmit (
TCPConnection* t, TCPOctetStream* о
) {
t->ProcessOctet(o);
void TCPListen::Send (TCPConnection* t) {
// послать SYN, получить SYN, АСК и т.д.
ChangeStateft, TCPEstablished::Instanced); }
После выполнения специфичных для своего состояния действий эти операции вызывают ChangeState для изменения состояния объекта TCPConnection. У него нет никакой информации о протоколе TCP. Именно подклассы TCPState определяют переходы между состояниями и действия, диктуемые протоколом.
Известные применения
Ральф Джонсон и Джонатан Цвейг [JZ91] характеризуют паттерн состояние и описывают его применительно к протоколу TCP.
Наиболее популярные интерактивные программы рисования предоставляют «инструменты» для выполнения операций прямым манипулированием. Например, инструмент для рисования линий позволяет пользователю щелкнуть в произвольной точке мышью, а затем, перемещая мышь, провести из этой точки линию. Инструмент для выбора позволяет выбирать некоторые фигуры. Обычно все имеющиеся инструменты размещаются в палитре. Работа пользователя заключается в том, чтобы выбрать и применить инструмент, но на самом деле поведение редактора варьируется при смене инструмента: посредством инструмента для рисования мы создаем фигуры, при помощи инструмента выбора - выбираем их и т.д. Чтобы отразить зависимость поведения редактора от текущего инструмента, можно воспользоваться паттерном состояние.
Можно определить абстрактный класс Tool, подклассы которого реализуют зависящее от инструмента поведение. Графический редактор хранит ссылку на текущий объект Tool и делегирует ему поступающие запросы. При выборе инструмента редактор использует другой объект, что приводит к изменению поведения.
Данная техника используется в каркасах графических редакторов HotDraw [Joh92] и Unidraw [VL90]. Она позволяет клиентам легко определять новые виды
Паттерны поведения
инструментов. В HotDraw класс DrawingController переадресует запросы текущему объекту Tool. В Unidraw соответствующие классы называются Viewer и Tool. На приведенной ниже диаграмме классов схематично представлены интерфейсы классов Tool и DrawingController.
Описанный Джеймсом Коплиеном [Сор92] прием конверт-письмо (Envelope-Letter) также относится к паттерну состояние. Техника конверт-письмо - это способ изменить класс объекта во время выполнения. Паттерн состояние является частным случаем, в нем акцент делается на работу с объектами, поведение которых зависит от состояния.
Родственные паттерны
Паттерн приспособленец подсказывает, как и когда можно разделять объекты класса State.
Объекты класса state часто бывают одиночками.
Дата добавления: 2015-09-11; просмотров: 97 | Поможем написать вашу работу | Нарушение авторских прав |