Erich Gamma Ralph Johnson Richard Helm John Vlissides Addison-Wesley



Download 6,32 Mb.
Pdf ko'rish
bet184/273
Sana02.03.2022
Hajmi6,32 Mb.
#479589
1   ...   180   181   182   183   184   185   186   187   ...   273
Bog'liq
Priemioop

Паттерн Command
поместить лишь ссылку на команду. Команды, которые обязательно нужно
копировать перед помещением в список истории, ведут себя подобно про-
тотипам (см. описание паттерна прототип);
а
 как избежать накопления ошибок в процессе отмены.
При обеспечении на-
дежного, сохраняющего семантику механизма отмены и повтора может воз-
никнуть проблема гистерезиса. При выполнении, отмене и повторе команд
иногда накапливаются ошибки, в результате чего состояние приложения
оказывается отличным от первоначального. Поэтому порой необходимо со-
хранять в команде больше информации, дабы гарантировать, что объекты
будут целиком восстановлены. Чтобы предоставить команде доступ к этой
информации, не раскрывая внутреннего устройства объектов, можно вос-
пользоваться паттерном хранитель;
а
 применение шаблонов в C++.
Для команд, которые не допускают отмену
и не имеют аргументов, в языке C++ можно воспользоваться шаблонами, что-
бы не создавать подкласс класса Command для каждой пары действие-полу-
чатель. Как это сделать, мы продемонстрируем в разделе «Пример кода».
Пример кода
Приведенный ниже код на языке C++ дает представление о реализации клас-
сов Command, обсуждавшихся в разделе «Мотивация». Мы определим классы
OpenCommand, PasteCommand и MacroCommand. Сначала абстрактный класс
Command:
class Command {
public:
virtual ~Command ();
virtual void Execute () = 0;
protected:
Command ( ) ;
};
Команда OpenCommand открывает документ, имя которому задает пользова-
тель. Конструктору OpenCommand передается объект Application. Функция
AskUser запрашивает у пользователя имя открываемого документа:
class OpenCommand : public Command {
public :
OpenCommand (Application*) ;
virtual void Execute ( ) ;
protected:
virtual const char* AskUser ();
private:
Application* _application;
char* _response;
};
OpenCommand::OpenCommand (Application* a) {
_application = a;
}



Download 6,32 Mb.

Do'stlaringiz bilan baham:
1   ...   180   181   182   183   184   185   186   187   ...   273




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish