![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование паттерна Comand.
Kolan © (2006-08-10 12:39:00)Здравствуйте,
Не могу понять как его правильно использовать.
инициатор отправляет запрос, вызывая операцию команды Execute.
Те если у меня есть комманда, которую я хочу проделать я пишу так:
Command.Execute
?
А что делать если для выполнения комманды мне нужны параметры? В кинге есть пример:
class PasteCommand : public Command { public:
PasteCommand(Document*);
virtual void ExecuteO; private:
Document* „document;
PasteCommand::PasteCommand (Document* doc) { _document = doc;
void PasteCommand::Execute () { _document->Paste();
}
Но если я вызываваю толькоExecuteкак я передам параметр( в данном случаеDocument)? А кто вызываетPasteCommand?
Не понятно...
Kolan (2006-08-11 17:13:00) [1]
> clickmaker © (11.08.06 16:38) [10]
..........
> PasteCommand - это конструктор.
Убейте меня..
Точно, это же конструктор. Теперь все на места встало :).. Как я не допер сам...
Все теперь понятно как действует этот паттерн....
Благодарю
PS
С++ - вредный язык :)
Джо (2006-08-11 17:07:00) [2]> [7] Джо © (11.08.06 01:55)
> Ну, в конце-концов, параметры комманды можно передавать
> методу фабрики, создающего эту комманду :)
Ну, или прямо его же конструктору.
clickmaker (2006-08-11 16:38:00) [3]че-то муть какая-то
PasteCommand - это конструктор.
При создании, нужно указать документ, путем подсовывания его в конструктор.
Потом можно дергать методы без параметров, бо объект уже проинициализирован.
Чего непонятного?
jack128 (2006-08-11 12:07:00) [4]Kolan © (11.08.06 0:02) [3]
С TAction както понятно. Присвоил его кнопке, на кнопку нажал - вызвался OnExecute.Для TAction вызвался OnExecute, для других типов action'ов что то другое..
а ты что, думаешь, в твоим Command'ом будет как то иначе? Просто поддержку TAction реализовал borland, а поддержку твоей команды должен будешь реализовать ты сам.
Ketmar (2006-08-11 10:07:00) [5]ну опять пришли и не дали мне развернуться... а у меня столько идей было...
Джо (2006-08-11 01:55:00) [6]Ну, в конце-концов, параметры комманды можно передавать методу фабрики, создающего эту комманду :)
Kolan (2006-08-11 01:42:00) [7]
> Советую тебе на rsdn'овский форумах в "архитектуре" пострашивать
> про паттерны, там много любителей доходчиво объяснить. мне
> в свое время очень помогло.
О дельный совет. :)
> Как бы сказал небезызвестный ИШ
Дык я и пытаюсь понять подходит али нет...
Суслик (2006-08-11 01:37:00) [8]Как бы сказал небезызвестный ИШ - каждый овощь хорошь что-то там - не помню.
Одним словом - не надо заменять что-то паттерном. Паттерн нужно применять там, где он действительно работает.
ЗЫ. Советую тебе на rsdn'овский форумах в "архитектуре" пострашивать про паттерны, там много любителей доходчиво объяснить. мне в свое время очень помогло.
Ketmar (2006-08-11 01:27:00) [9]совершенно как угодно. например, так: (const args: array of const). хотя это криво. %-)
Kolan (2006-08-11 00:02:00) [10]
> jack128 © (10.08.06 23:47) [2]
СTActionкакто понятно. Присвоил его кнопке, на кнопку нажал - вызвалсяOnExecute.
Переформулирую. Вот остальной код из книги.
PasteCommand::PasteCommand (Document* doc) {
_document = doc;
}
void PasteCommand::Execute () { _document->Paste();
}
Зачем нужнаPasteCommandи кто её вызывает?
> У его метода Execute тоже нету параметров. Тем не менее
> - это никого не смущает..
Е еще вопрос: Можноли и нужноли использовать этот паттерн если я хочу проделывать операции(комманды) требующие параметров? И как это сделать, если возможно?
Те пример:
Была у меня функция:
function Add(X, Y: Integer): Integer;
как её заменить этим паттерном?
jack128 (2006-08-10 23:47:00) [11]ты TAction использовал когда нить? У его метода Execute тоже нету параметров. Тем не менее - это никого не смущает..
Kolan (2006-08-10 23:44:00) [12]Глупый вопрос чтоли?