Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

Использование паттерна Comand.   Найти похожие ветки 

 
Kolan ©   (2006-08-10 12:39) [0]

Здравствуйте,
 Не могу понять как его правильно использовать.
инициатор отправляет запрос, вызывая операцию команды 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-10 23:44) [1]

Глупый вопрос чтоли?


 
jack128 ©   (2006-08-10 23:47) [2]

ты TAction использовал когда нить?  У его метода Execute тоже нету параметров. Тем не менее - это никого не смущает..


 
Kolan ©   (2006-08-11 00:02) [3]


> 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;

как её заменить этим паттерном?


 
Ketmar ©   (2006-08-11 01:27) [4]

совершенно как угодно. например, так: (const args: array of const). хотя это криво. %-)


 
Суслик ©   (2006-08-11 01:37) [5]

Как бы сказал небезызвестный ИШ - каждый овощь хорошь что-то там - не помню.

Одним словом - не надо заменять что-то паттерном. Паттерн нужно применять там, где он действительно работает.

ЗЫ. Советую тебе на rsdn"овский форумах в "архитектуре" пострашивать про паттерны, там много любителей доходчиво объяснить. мне в свое время очень помогло.


 
Kolan ©   (2006-08-11 01:42) [6]


> Советую тебе на rsdn"овский форумах в "архитектуре" пострашивать
> про паттерны, там много любителей доходчиво объяснить. мне
> в свое время очень помогло.

О дельный совет. :)


> Как бы сказал небезызвестный ИШ

Дык я и пытаюсь понять подходит али нет...


 
Джо ©   (2006-08-11 01:55) [7]

Ну, в конце-концов, параметры комманды можно передавать методу фабрики, создающего эту комманду :)


 
Ketmar ©   (2006-08-11 10:07) [8]

ну опять пришли и не дали мне развернуться... а у меня столько идей было...


 
jack128 ©   (2006-08-11 12:07) [9]

Kolan ©   (11.08.06 0:02) [3]
С TAction както понятно. Присвоил его кнопке, на кнопку нажал - вызвался OnExecute.
Для TAction вызвался OnExecute, для других типов action"ов что то другое..

а ты что, думаешь, в твоим Command"ом будет как то иначе? Просто поддержку TAction реализовал borland, а поддержку твоей команды должен будешь реализовать ты сам.


 
clickmaker ©   (2006-08-11 16:38) [10]

че-то муть какая-то
PasteCommand - это конструктор.
При создании, нужно указать документ, путем подсовывания его в конструктор.
Потом можно дергать методы без параметров, бо объект уже проинициализирован.
Чего непонятного?


 
Джо ©   (2006-08-11 17:07) [11]

> [7] Джо ©   (11.08.06 01:55)
> Ну, в конце-концов, параметры комманды можно передавать
> методу фабрики, создающего эту комманду :)

Ну, или прямо его же конструктору.


 
Kolan ©   (2006-08-11 17:13) [12]


> clickmaker ©   (11.08.06 16:38) [10]

..........

> PasteCommand - это конструктор.

Убейте меня..

Точно, это же конструктор. Теперь все на места встало :).. Как я не допер сам...

Все теперь понятно как действует этот паттерн....

Благодарю

PS
 С++ - вредный язык :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.04 c
2-1157319054
ramzes2
2006-09-04 01:30
2006.09.24
как назначить родителя диалогу


15-1157039234
Empleado
2006-08-31 19:47
2006.09.24
Странная статья


15-1157187204
Новичоккк
2006-09-02 12:53
2006.09.24
Можно ли откомпилировать проект без запуска Delphi


15-1157456068
H010d Freeze
2006-09-05 15:34
2006.09.24
Build проекта из командной строки


1-1155628054
трям
2006-08-15 11:47
2006.09.24
Как определить Rect выделенной ячейки в DBGrid ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский