Операции върху обекти. Команди за изграждане на обект 1c обща команда правилни форми

Екипе конфигурационен обект, с който разработчикът може да опише действията, които трябва да бъдат извършени от потребителя.

Има общи команди - команди, които не са специфични за обект или служат за извършване на действия върху обекти, които не използват стандартни команди.

Команди могат да съществуват и за отделни конфигурационни обекти. Те служат за извършване на операции, свързани с този конкретен обект.

Командите могат да бъдат параметризирани, тоест те могат да използват някаква стойност, предадена от платформата в своя алгоритъм. Типът на тази стойност се задава в конфигуратора и такава параметризирана команда се показва само във формуляри, които имат атрибути от същия тип като параметъра на командата.

Действията, извършвани от дадена команда, са описани на езика на 1C:Enterprise в командния модул.

Полезни връзки:

  • конфигурационни обекти,
  • Инструменти за разработка.

командване

Екипе действие, което потребителят може да извърши в програмата. Всички команди могат да бъдат класифицирани по няколко начина.

Стандартни команди и команди, създадени от разработчика

Във връзка с това как се е появила командата в конфигурацията, всички команди могат да бъдат разделени на:

  • стандарт,
  • Създаден от разработчик.

Стандартните команди се доставят автоматично от платформата. Конфигурационните обекти могат да доставят стандартни команди, както и разширения на формуляри и разширения на елементи. Таблицаразположени във формата. Прочетете още...

Например ръководство Контрагентиможе да подава команди Контрагенти, Изпълнител: създайтеи Акаунти: създайте група.

Разработчикът може сам да създава произволни команди в конфигурацията. Той може да добави обект Command към клон Общ, добавете обект Command към конкретен конфигурационен обект или опишете команда като процедура на език на 1C:Enterprise в специфична форма. Прочетете още...

Например могат да се добавят общи команди Инсталирайте скенер за баркод, Настройте скенер за баркоди други.

Команди за навигация и команди за действие

Във връзка с това какъв е резултатът от изпълнението на дадена команда, всички команди могат да бъдат разделени на:

  • команди за навигация,
  • Команди за действие.

Командите за навигация отварят формуляри в текущия прозорец. По правило по този начин се извършва преход към някои списъци. Прочетете още...

Например командата за навигация Складовеще отвори списъка със складове в главния прозорец.

В резултат на изпълнение на командата за действие се отваря допълнителен прозорец. По правило по този начин се извършва преход към формата на обекта или към формата на отчета / обработката. Прочетете още...

Например командата за действие Наличностще отвори помощен прозорец за редактиране на данните на новия склад.

Независими и параметрируеми команди

Във връзка с вътрешната си структура всички команди могат да бъдат разделени на:

  • независим,
  • Параметрируеми

Не е необходима допълнителна информация за изпълнение на независими команди. Прочетете още...

Например независим екип Контрагентине изисква допълнителна информация за изпълнението му. Той просто отваря списък с всички контрагенти.

За изпълнение на параметрируеми команди е необходима допълнителна информация - стойността на командния параметър. Прочетете още...

Например параметризираната команда Разплащателни сметки (Object.Supplier)отваря списък с разплащателни сметки на конкретен контрагент. Следователно, за неговото прилагане е необходимо да знаете сметките за сетълмент на кой контрагент трябва да отворите. Тоест, контрагентът е параметър на тази команда.

Глобални команди и локални команди за формуляри

Във връзка с командите към някаква форма, всички команди могат да бъдат разделени на.

Технологичната платформа "1C:Enterprise 8" се използва за автоматизиране на решаването на широк спектър от управленски и счетоводни задачи в различни предприятия. С такъв обширен обхват, естествено, може да има ситуации, при които функционалността на стандартните команди не е достатъчна.
За реализиране на допълнителна функционалност се използва вграденият език 1C:Enterprise. По принцип тази функционалност е реализирана в манипулатори на събития. Съществува обаче и необходимост да се предостави на потребителите възможност за интерактивен достъп до някои от внедрените функции от интерфейса.


За да разреши тези проблеми, 1C:Enterprise предоставя възможност за създаване на произволна команда. В конфигурацията произволните команди се представят от нов конфигурационен обект Екип. Конфигурационният обект Командата е предназначена за внедряване на нестандартни функции в приложното решение с възможност за използване на стандартни механизми за активиране на реализираната функционалност.
към командния интерфейс.
Технологичната платформа не ограничава състава на произволни команди и функциите, които изпълняват. Всичко се определя от изискванията за конкретно приложно решение. Когато създава произволна команда, разработчикът трябва да зададе нейните свойства, които определят правилата за включване на командата в интерфейса, и да напише програмния код, който определя действията, извършвани от командата. Тази произволна команда се различава от стандартната. За последното както свойствата, така и действията, които трябва да бъдат извършени, се определят от самата платформа.
В една конфигурация произволните команди могат да бъдат реализирани или като независими обекти - общи команди, или като подчинени на други обекти.

Общите произволни команди ви позволяват да реализирате нестандартна функционалност, свързана с решението на приложението като цяло. В този случай персонализираната команда се създава като независим конфигурационен обект, принадлежащ към класа Общи команди.

Произволни общи команди

Например, помислете как да направите и конфигурирате всички свойства на командата „Настройване на скенер за баркод“. Търговските предприятия често трябва да автоматизират процеса на регистриране на стоки за продажба. За това се използват скенери за баркод. Технологичната платформа обаче "не знае" нищо за тези устройства и не разполага със средства за работа с тях. Ето защо, за да работите с баркод скенер, трябва да свържете специална програма - драйвер. За да свържете такъв драйвер, се изпълнява обща произволна команда Инсталиране на скенер за баркод. Като зададе определени стойности за свойствата на тази команда, разработчикът я направи достъпна за потребителите.

Произволна обща команда "Конфигуриране на скенера"

Функциите за работа със скенера са общи за цялото приложно решение, тоест не се отнасят до конкретен конфигурационен обект, така че произволна команда се изпълнява като обща.
Командата изпълнява действие - свързва драйвер към приложното решение за работа с баркод скенер. Следователно той се намира в лентата с действия на главния прозорец на приложението.

Друга често срещана задача е получаването на хартиени копия на електронни документи. Съставът на документите, тяхната структура се определят от автоматизираната приложна задача. Естествено, в платформата е невъзможно да се осигури цялото разнообразие от документи и опции за техните печатни форми. За да "научите" документ да се "прехвърля" на хартия, можете да използвате произволна команда.
В демонстрационната база данни, за да получите печатната форма на документа ConsumptionProductсъздаде подчинен екип PrintInvoiceInvoice

Произволна подчинена команда "Печат на фактура"

Стойности на свойствата на командата Групаи Тип параметър на командатаопределя местоположението на командата в командния интерфейс - менюто Печат на командния панел на формуляра на документа, а процедурата във вградения език осигурява формирането на печатна форма на конкретен документ, към който се предава връзка в командния параметър.
Друга доста специфична употреба на произволни команди е да се разшири или предефинира стандартната функционалност на стандартна команда. Такива задачи възникват например в резултат на изискване за намаляване на броя на ръчните операции или промяна на поведението по подразбиране на обекти.
Например в нашата база данни е внедрен обект за обработка Административно обслужване. Командата за отваряне на основния формуляр трябваше да се постави в навигационния панел, а самият формуляр трябваше да се отвори в работното пространство на основния прозорец на приложението. Но стандартната функционалност на този обект се различава от необходимата - командата за отваряне на формуляра се намира в лентата с действия, а формулярът се отваря в нов допълнителен прозорец.
За да се осигури необходимата функционалност, свойството Обработка е премахнато Използвайте стандартни команди - стандартните команди не ни подхождат.

Деактивиране на използването на стандартни команди

Достъпът до обработката се осигурява от произволна подчинена команда Административно обслужване A, който е настроен да бъде в групата Normal на лентата за навигация на главния прозорец на приложението. В резултат на избора на тази команда в работното пространство на главния прозорец се показва форма за обработка.
Има много подобни задачи в конкретни приложни решения и произволните команди са най-подходящи за тяхното решаване.

Произволна подчинена команда "Административно обслужване"

Характеристики на настаняване
Характеристика на произволните команди, в сравнение със стандартните, е необходимостта да се опише местоположението им по подразбиране в командния интерфейс. Местоположението на произволна команда се задава от разработчика при конфигуриране на приложното решение.

Разположението по подразбиране в командния интерфейс за произволни команди се определя от:

  • категория и група, определени за отбора
  • принадлежност на командата към конфигурационната подсистема (за независими команди) тип на командния параметър (за параметрируеми команди).

ВНИМАНИЕ!
командно свойство Групатрябва да се попълни. В противен случай ще възникне грешка при актуализиране на конфигурацията на базата данни и актуализацията няма да бъде успешна.

Когато избирате група за команда, трябва да обърнете внимание на необходимостта от предаване на параметри на командата и действията, извършвани от командата. Като общ критерий може да се предложи да се спазват същите правила, които се използват за стандартните команди.

  • Ако командата за нейното изпълнение не изисква параметри, тогава за нея изберете група с категорията Навигационна лента или с категориятаЕкшън барове.
  • Ако дадена команда за нейното изпълнение изисква подаване на параметър, то за нея трябва да изберете група с категорията Навигационен панел на формата или с категорията Команден панел на формата.
  • За команди, чието изпълнение води до промяна на информацията, показвана в работната област на същия прозорец, трябва да изберете категорията Навигационна лентаза независими екипи или Лента за навигация на формуляраза параметризирани команди.
  • За команди, чието изпълнение води до промяна на данните в информационната база, изберете категория Лента за действиеза независими екипи или Командна лента за формулярза параметризирани команди. Също така се препоръчва да изберете тази категория за команди, които ще доведат до отваряне на нов прозорец за показване на формуляри за избор, формуляри за отчети, формуляри за обработка.

За да включите обща независима команда в един или друг раздел на командния интерфейс, трябва да посочите принадлежността й към съответните подсистеми. Команда се включва в подсистемите, като се маркира в свойството Задължителни подсистеми.

Подчинена команда не може да бъде директно включена в подсистема. Следователно подчинените независими команди се включват автоматично в командния интерфейс на онези подсистеми, в които е включен обектът-собственик на командата.
Но параметрируемите произволни команди, както общи, така и подчинени, са включени в командния интерфейс по различен начин. Това се дължи на факта, че командата може да получи действителната стойност на своя параметър само от данните на формуляра. Ето защо параметризираните команди могат да се поставят само в навигационната лента на формуляра или в командната лента на формуляра. Освен това тази стойност трябва да има тип данни, който е валиден за параметъра. Съставът на разрешените типове параметри се задава в свойството Тип параметър на командата

Съставът на разрешените типове параметри за параметризирана команда се определя от нейното свойство „Тип параметър на командата“

Сравнявайки състава на типовете, посочени в свойството на командата, с типовете атрибути на формуляра, системата взема решение за включване на командата в една или друга форма.

Персонализирана команда с параметри се включва във формуляра само ако формулярът има поне един атрибут с тип, който е част от валидните. При проверката се вземат предвид и детайлите, които са подчинени на основния атрибут на формуляра.Съставът на проверяваните подчинени подробности е ограничен до първо ниво на подчинение.
Нека се върнем към решаването на нашия проблем с отделянето на функционалността за работа с цените в отделна подсистема. В допълнение към задаването на цени, ние също се нуждаем от възможност за отпечатване на ценови етикети за стоки. В този случай трябва да се приложат два режима:


  • отпечатване на ценови етикети за всички стоки за всички съществуващи видове цени,
  • печат на ценови етикети за всички стоки за един вид цена.

Стандартните команди за конфигурационен обект не могат да ни осигурят тези възможности. Следователно трябва да внедрим допълнителна функционалност. За целта ще използваме произволни команди.

Като цяло независим екип
Функционалността за отпечатване на всички етикети с цени на пръв поглед трябва да разшири възможностите на директорията за стоки. Този конфигурационен обект обаче описва набор от обекти с данни на информационната база. Ако внедрим командата като подчинена на директорията, тогава ще „обучим“ всеки от обектите с данни да отпечатва ценови етикети за всички продукти. А това вече е излишно. Обектът на данни трябва да отговаря само за себе си. Следователно командата ще бъде обща.
За да добавите произволна обща команда, използвайте елемента Добавяне от контекстното меню на възела Общи команди на конфигурационното дърво.

В резултат на това ще бъде добавена обща команда и за нея ще се отворят прозорецът със свойства и прозорецът за редактиране на командния модул.

Свойства и модул на обща произволна команда

В групата Основни свойства задайте стойностите на свойствата на командата:


  • Име- „Печат на ценови листи на стоки”;
  • Синоним- оставете автоматично генерирания синоним;
  • КоментирайтеНяма да попълваме.

Следващата стъпка е да изберете категория на екип и група, която да го хоства по подразбиране. Нашата команда за нейното изпълнение не изисква параметри - тя е независима. Командата извършва действия за обработка на данните, съхранени в информационната база, за да получи набор от ценови етикети и не променя контекста за решаване на никоя задача. Затова за командата ще зададем категорията Action bar. В коя група ще се появи? Най-логичното е да го поставите в група Обслужване.
Следователно за свойството Group отворете прозорец със списък от групи и изберете елемент n Лента за действие. Обслужване.

ЗАБЕЛЕЖКА
Обърнете внимание на свойствата Тип параметър на командата, Режим на използване на параметъри и променя данни– не са налични за пълнене. Свойствата са предназначени да опишат параметризираната команда и стават достъпни само при избор на група с категориите Панел за навигация на формуляр или Панел за команди на формуляр.

Задаване на разположението на произволна обща команда

Екипът, който създадохме е независим. Следователно е необходимо да се определи в кои секции на командния интерфейс ще бъде наличен. Командата трябва да е налична в същите секции, където можете да извършвате действия за управление на цените.
В нашия случай създаденият екип трябва да принадлежи към три подсистеми - Ценообразуване, Цени, Предприятие. Следователно трябва да редактираме свойството Composition на трите подсистеми.
За да намалите броя на изпълняваните действия, изберете елемента Разширени от контекстното меню на създадената команда. В резултат на това ще се отвори прозорец, в който в раздела Подсистеми можете да посочите всички подсистеми, към които принадлежи командата.

Включване на произволна обща команда в подсистемите

Нашата команда е достъпна за потребители с ролята на администратор чрез задаване на свойството на ролята Задаване на разрешения за нови обекти. От нас се изисква да го предоставим и за ролята на Мениджър на цените.
Както при други конфигурационни обекти, достъпността може да бъде конфигурирана за споделена команда в прозореца за редактиране на роли.
Или можете - във вече отворения прозорец Разширени в раздела Права. В списъка Роли изберете персонализираната роля и в списъка Права задайте право Преглед за създадената команда

Задаване на наличност на екипа за ролята на Price Manager

Настройката на видимостта на команда по роли за произволна независима команда се извършва по същия начин, както настройката за стандартни команди - в редактора на командния интерфейс.
Нашата команда по подразбиране трябва да е видима за потребителя с ролята на Price Manager и трябва да бъде скрита от потребителя с ролята на администратор. За да направите това, в редактора на командния интерфейс на подсистемата за ценообразуване премахнете отметката от флага за обща видимост в колонатаВидимост. Това ще ни осигури невидимостта на екипа за всички роли, включително и новосъздадените. А за ролята на Price Manager изрично поставете отметка в съответната колона.
Нека запазим конфигурацията, стартираме приложението като потребител на Price Manager и изберете секцията Price Management.

Задаване на видимостта на произволна обща команда

В командния интерфейс командата Печат на продуктови етикети е достъпна в секцията Управление на цените (чрез посочване на членство в подсистемата Ценообразуване). Командата се поставя в групата Service на лентата с действия (чрез посочване на съответната стойност на свойството Group).

Така че за произволна обща независима команда:

  • разположението в командния интерфейс по подразбиране се определя от стойността на свойството Group;
  • включването в раздела на командния интерфейс се определя от принадлежността към съответната подсистема;
  • достъпността за потребителя се определя от стойността на правото на преглед.

Създадохме екип. Но как да кажете на потребителя какви действия изпълнява произволна команда? Отговорът е очевиден – опишете целта на командата в документацията към приложеното решение. Освен това целта на командата може да бъде описана във вградената онлайн помощ. За работа с референтна информация са предназначени свойствата на общата команда от групата Референтна информация (фиг.

Справочна информация за произволна обща команда

Търсенето на описание на команда в документацията или онлайн помощта обаче е дълъг процес. Можете да помогнете на потребителя бързо да запомни целта на дадена команда, като изберете говорен изглед за нея. Произволна обща команда в командния интерфейс е представена от нейното свойство Synonym. Сега командата е представена с текст "Печат на ценови етикети за стоки", и това представяне е доста информативно. Но в бъдеще към приложеното решение ще добавим още една команда за отпечатване на ценови етикети - по тип цена. Следователно си струва да помислите за такова представяне на командата, което ще каже на потребителя коя опция за отпечатване на ценови етикети ще бъде изпълнена. Да кажем, че ще стане „Отпечатай всички ценови етикети“.
Друг начин да напомните на потребителя за целта на дадена команда е да използвате свойството Tooltip. Текстът, определен в това свойство, се показва в подсказката, когато показалецът на мишката е върху командата. За свойството Hint задайте текста "Печат на етикети с цени за всички стоки за всички видове цени". В резултат на промяна на стойностите на свойствата Synonym и Prompt, представянето на командата
в командния интерфейс е променен.

Променен команден изглед, подсказка, помощ

На този етап създадохме екип, конфигурирахме неговото местоположение, достъпност и представяне. Остава да реализираме функционалността на екипа, тоест действията, които екипът трябва да извършва. За да определи действията, които трябва да бъдат извършени, разработчикът трябва да внедри процедурата на език на 1C:Enterprise. Процедурата трябва да бъде поставена в команден модул, който може да бъде достъпен чрез хипервръзката Open propertiesКоманден модул.

Общи команди- платформен механизъм, предназначен да опише често използвани команди в конфигурацията 1C 8.3.

Общите или глобалните команди са полезни, когато една команда е необходима на много конфигурационни обекти. Например бутон за показване на структурата на подчинение на документа, команда за показване на осчетоводяване на документ, отчет за промяна на обект.

Можете да подадете параметри на командата, например от формата на кой обект се извиква.

Настройка и свойства на обща команда в 1C

Добавянето на нова команда и настройването на общ формуляр е доста просто, нека разгледаме по-подробно този процес:

Вземете 267 1C видео урока безплатно:

  • Група- местоположението на бъдещата команда на интерфейса.
  • Тип параметър на командата- дефинира набор от обекти, в които ще се показва бъдещата команда.
  • Режим на използване на параметър— определя възможността за предаване на една или повече стойности като команден параметър.
  • Променя данни- ако отметката е поставена, тогава при изпълнение на командата формулярът ще бъде преизчислен от сървъра.
  • Команден модул- манипулатор за изпълнение на команда, изпълнявана на клиента.

Пример за команден модул:

&В процедурата на клиента Обработка на команди (параметър на командата, параметри за изпълнение на команда) Ако стойността е попълнена (параметър на командата), тогава OpenForm( "Обща форма. структураподчинение", Нова структура ("Обект за избор", команден параметър) , Параметри за изпълнение на командата. Източник, Параметри за изпълнение на командата. Източник. Ключ за уникалност, параметри за изпълнение на команда. прозорец); EndIf ; EndProcedure

Където CommandParameter е обектът, който извиква командата. А в ExecutionParameters на командата структурата, която описва източника (наречен формуляр), прозореца (прозореца на клиентското приложение), уникалността, показва дали да се търси вече отворена форма или не.

Групи от команди 1C

Три или повече обекта, тогава:

    изпълнете командата " Форматиране > Подравняване/Разпределение > <вариант действия>" главно меню;

    изпълнете командата " Подравняване/разпределяне > <вариант действия>» контекстно меню;

    в лентата с инструменти за подравняване щракнете върху бутона, съответстващ на желаното действие.

Налични са следните опции за подравняване/разпределение:

    Подравняване вляво. Избраните обекти ще бъдат подравнени вляво спрямо най-левия обект:

    Подравнете центъра. Избраните обекти ще бъдат центрирани. Центърът се изчислява въз основа на позицията на най-левия обект и най-десния обект сред избраните и размерите на самите обекти:

    Подравняване вдясно. Избраните обекти ще бъдат подравнени вдясно спрямо най-десния обект:

    Подравнете отгоре. Избраните обекти ще бъдат подравнени отгоре спрямо най-горния обект:

    Подравнете в средата. Избраните обекти ще бъдат центрирани. Средата се изчислява въз основа на позицията на най-горния обект и най-долния обект сред избраните и размерите на самите обекти:

    Подравнете отдолу. Избраните обекти ще бъдат подравнени отдолу спрямо най-долния обект:

    Разпределете хоризонтално. Избраните обекти ще бъдат на еднакво разстояние един от друг. Разстоянието се изчислява въз основа на позицията на най-левия обект и най-десния обект сред избраните и размерите на самите обекти:

    Разпределете вертикално. Избраните обекти ще бъдат на еднакво разстояние един от друг. Разстоянието се изчислява подобно на предишния параграф:

Команда за модел (Команда)

Име и класификация на модела

Команда - модел на поведение на обекти.

Целта на шаблона Command

Капсулира заявка като обект, като по този начин ви позволява да зададете клиентски опции за обработка на подходящи заявки, поставяне на заявки в опашка или регистриране и поддържане на анулиране на операции.

Използвайте командния модел, ако:

  • системата се управлява от събития. При възникване на такова събитие (заявка) трябва да се извърши определена последователност от действия;
  • необходимо е да се параметризират обекти според действието, което трябва да се извърши, да се поставят в опашка заявки или да се поддържат операции за отмяна (отмяна) и повторение (повтаряне);
  • имаме нужда от обектно-ориентиран аналог на функцията за обратно извикване в процедурното програмиране.

Пример за управлявана от събития система е приложение с потребителски интерфейс. Когато е избран определен елемент от менюто, потребителят получава подкана да извърши конкретно действие (например отваряне на файл).

Описание на модела Command

Моделът Command трансформира заявка за извършване на действие в отделен команден обект. Това капсулиране ви позволява да предавате тези действия на други функции и обекти като параметър, като им казвате да изпълнят исканата операция. Командата е обект, следователно, всякакви операции са разрешени върху нея, като върху обект.

Интерфейсът на командния обект се дефинира от абстрактния базов клас Command и в най-простия си случай има един метод execute(). Производните класове дефинират получателя на заявката (указател към обекта получател) и операцията, необходима за изпълнение на операцията (методът на този обект). Методът execute() на подкласовете Command просто извиква желаната операция приемник.

Команден модел може да има до три члена:

  • клиент, който инстанцира команден обект;
  • рикуестърът използва командния обект;
  • получател на заявка.

Структура на командния модел

Структурата на шаблона Command е показана на фиг. 63.

Първо, клиентът създава обект специфична команда,като го конфигурирате като получател на заявката. Този обект е достъпен и за инициатора. Инициаторът го използва при изпращане на заявката чрез извикване на метода изпълни().Този алгоритъм е подобен на това как работи функцията за обратно извикване в процедурното програмиране - функцията се регистрира, за да бъде извикана по-късно.

модел командаразделя обекта, който инициира операцията, от обекта, който знае как да я изпълни. Единственото нещо, което инициаторът трябва да знае, е как да изпрати командата. Това дава системата

приемник->действие();

Ориз. 63. UML диаграма на шаблона Команда

Гъвкавост: Позволява динамично заместване на команди, сложни съставни команди, операции за отмяна.

Членове

Command - Команда: декларира интерфейс за извършване на операция.

ConcreteCommand - специфична команда: дефинира връзката между обекта получател Приемники действие; изпълнява операцията Execute чрез извикване на съответните операции на обекта Приемник.

Client - клиент: създава обект от класа ConcreteCommand и задава неговия приемник.

Invoker - Initiator: отнася се до командата за изпълнение на заявката.

Получател - получателят: има информация за това как да извърши операциите, необходими за удовлетворяване на заявката. Всеки клас може да действа като получател.

Връзки

Клиентът създава ConcreteCommand обект и задава получател за него.

Invoker запазва обекта ConcreteCommand.

Инициаторът изпраща заявка чрез извикване на командната операция Execute. Ако отмяната се поддържа, ConcreteCommand запазва достатъчно информация за състоянието, преди да извика Execute, за да позволи връщане назад.

aReceiver aClient

G"| нова команда(aReceiver)

StoreCommand(aCommand)

Ориз. 64. UML диаграма на последователността на шаблона Команда

Обектът ConcreteCommand извиква операции на приемник, за да завърши заявката.

На фиг. Фигура 64 показва как командата прекъсва връзката между инициатора и получателя (и заявката, която последният трябва да изпълни).

Резултати от прилагането на модела Command

Командата прекъсва връзката между обекта, който инициира операцията, и обекта, който има информация за това как да я изпълни.

Екипите са реални обекти. Можете да ги манипулирате и разширявате, както всеки друг обект.

Съставните команди могат да бъдат сглобени от прости команди. Като цяло съставните команди се описват от модела Linker.

Добавянето на нови команди е лесно, защото не е необходимо да се променят съществуващи класове.

Внедряване на командния модел

Нека разгледаме изпълнението на шаблона Command на примера на играта "Шах". Ние симулираме възможността за извършване на следните операции:

  • създайте нова игра;
  • отворете съществуваща игра;
  • запишете играта;
  • направи още един ход
  • отменете последния ход.

void open(string файл) ( cout

void save(string файл) ( cout

void make_move(преместване на низ) ( cout

низ getPlayerInput(подкана за низ) ( въвеждане на низ; cout > въвеждане; връщане на вход;

// Базов клас class Command (

virtual ~Command() 0 virtual void execute() = 0; защитен:

Команда (Игра* p): pgame(p) () Игра * pgame;

клас CreateGameCommand: публична команда

CreateGameCommand(Game * p): Command(p) () void execute() ( pgame->create();

клас OpenGameCommand: публична команда

OpenGameCommand(Game * p) : Command(p) () void execute() ( string file_name;

file_name = getPlayerInput("Въведете име на файл:"); pgame->open(име_на_файл);

клас SaveGameCommand: публична команда

SaveGameCommand(Game * p) : Command(p) () void execute() ( string file_name;

file_name = getPlayerInput("Въведете име на файл:"); pgame->save(име_на_файл);

клас MakeMoveCommand: публична команда

MakeMoveCommand(Game * p): Command(p) () void execute() (

// Запазване на играта за възможно по-късно връщане назад pgame->save("TEMP F1LE"); движение на низ;

move = getPlayerInput("Въведете своя ход:"); pgame->make_move(преместване);

клас UndoCommand: публична команда

UndoCommand(Game * p) : Command(p) () void execute() (

// Възстановяване на играта от временен файл pgame->open("TEMP_FILE");

// Симулация на вектор на действията на играча v;

// Създаване на нова игра

v.push_back(нова CreateGameCommand(&game));

// Направете няколко хода

v.push_back(нова MakeMoveCommand(&game));

// Отмяна на последния ход v.push_back(new UndoCommand(&game));

// Запазване на играта

v.push_back(нова SaveGameCommand(&game));

for (size_t i=0; i execute();

за (size_t i=0; i

Изход от програмата:

Запазете играта в TEMPFILE Въведете своя ход: E2-E4 Направете ход E2-E4 Запазете играта в TEMP FILE Въведете своя ход: D2-D3 Направете ход D2-D3 Отворете играта от TEMP_FILE Въведете име на файла: gamel.sav Запазете играта в игра 1 . sav

Предимства на модела Command

Дава гъвкавост на системата, като отделя инициатора на заявка от нейния получател.

Свързани модели

модел линкерможе да се използва за прилагане на макроси.

модел Пазачапонякога предназначени да запазят състоянието на командата, необходимо за отмяна на нейния ефект.

екип,да бъде копиран, преди да бъде поставен в списъка с хронология, се държи като Прототип.

моб_инфо