Главная » Просмотр файлов » А. Александреску - Современное проектирование на C++

А. Александреску - Современное проектирование на C++ (1119444), страница 58

Файл №1119444 А. Александреску - Современное проектирование на C++ (А. Александреску - Современное проектирование на C++) 58 страницаА. Александреску - Современное проектирование на C++ (1119444) страница 582019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 58)

Он должен иметь отношение порядка, позволяющее хранить его в обьекте класса этб:: вар. Обычно в качестве идентификаторов типа используются строки и целые числа. ° Класс ягооцстсгеатог прелставляет собой вызываемую сущность, создающую объект. Этот класс должен поддерживать оператор О, не иметь параметров и возвращать указатель на объекты класса лЬзтгастягодцст. Объект класса ргоднстСгеатог всегда регистрируется вместе с идентификатором типа. 235 Глава 8. Фабрики объектов ° В классе гастогу реализуются следующие примитивы. Ьоо1 яей)зтег(сопле тоептзНегтурей, ргодцстсгеатог сгеатог); Эта функция регистрирует производитель изделия вместе с идентификатором типа. Если регистрация прошла успешно, она возвращает значение тгце, в противном случае возвращается значение Фа1ве (если производитель изделия с тем же илентификатором типа уже зарегистрирован ранее).

Ьоо1 цпйегззтегед(сопят тоептзЛегтурее зо); Эта функция аннулирует регистрацию идентификатора заданного типа. Если этот идентификатор был зарегистрирован ранее, функция возвращает значение тгце. лЬзтгастягооцст* Сгеатеоб)ест(сопле ИепттФзегтуреб зо); Эта функция выполняет поиск идентификатора типа во внутреннем ассоциативном массиве. Если идентификатор найден, она вызывает соответствующий производитель объектов данного типа и возвращает результат его работы. Если идентификатор не найден, возвращается результат работы функции Гастогуеггогяо11су<1оептз Негтуре; лЬзтгастягодцст>: пдпцпМпопптуре.

По умолчанию реализация класса гассогуеггогяо11су генерирует исключительную ситуацию вложенного типа ехсертз оп. 8.11. Краткий обзор шаблонного класса ОопеГасТогу ° Объявление класса с1опегастогу имеет следующий вид. тевр1ате < с1ааа лЬзтгастягооцсс, с1авв ягодцстсгеатог = лЬзтгастягодист" (<)(сопят лЬзтгастлгодцст*), тевр1асе«турепаве, с1ааа> с1азз гастогуаггогяо1зсу = пебац1ткастогудггог > с1азз с1опегастогу; Класс дЬзтгастлгооцст является базовым классом иерархии, для которой создается фабрика клонирования.

Класс ягооцстсгеатог представляет собой вызываемую сущность, создающую дубликат объекта, передаваемого как параметр, и возвращающую указатель на клон. В классе с1опегастогу реализуются следующие примитивы. Ьоо1 яед)зтег(сопзт туретпФой, ргооцстсгеатог сгеатог); Эта функция регистрирует производитель изделия вместе с типом туретпз.о (что позволяет неявно вызывать конструктор копирования класса зто:: туре 1пТо). Если регистрация прошла успешно, она возвращает значение тгце, в противном случае возвращается значение Фа)зе. Ьоо1 цпоегззтегед(сонат туретпФое туре1пто); Эта функция аннулирует регистрацию производителя объектов заданного типа. Если этот тип был зарегистрирован ранее, функция возвращает значение тгце.

лЬзтгастягооцст* сгеатеоЬ)ест(сопле дЬ|ггастргооцст* воое1); 236 Часть 1Ь Компоненты Эта функция выполняет поиск динамического типа объекта воде1 во внутреннем ассоциативном массиве. Обнаружив тип, она вызывает соответствующий производитель объектов данного типа и возвращает результат его работы, Если тип не найден, возвращается результат работы функции яассогудггогяо1- зсу<огдегедтуретпГо, АЬзтгастягобист>:".Опцпкпоиптуре.

Глава 8. Фабрики объектов 237 ШАБЛОН А~ВТ~7~С~ Р~С~о~~г В этой главе обсуждается обобшенная реализация шаблона проектирования АЬ- всгасс яастогу (Оапиша е[ а),, 1995). Абстрактная фабрика — это интерфейс для создания семейства связанных или взаимозависимых объектов. Абстрактные фабрики могут быть важными архитектурными компонентами, поскольку они гарантируют, что в системе создаются правильные конкретные объекты.

Если вы не хотите, чтобы кнопка яиМувиттоп появлялась в диалоговом окне сопчептзояа1пза1ой, используйте шаблон проектирования АЬвтгаст гастогу, гарантируюший, что эта кнопка появляется только в окне яцпкупза1од. Зля этого нужно проконтролировать лишь небольшую часть кода, а остальная часть приложения будет работать с абстрактными типами пз а1ой и виссоп. В главе рассматриваются следующие вопросы.

° Область применения шаблона проектирования аЬатгаст гассогу. ° Определение и реализация компонентов шаблона АЬзтгаст кассогу. ° Использование обобшенных функциональных возможностей шаблона АЬзсгаст яастогу, предоставленных библиотекой ).окй и их расширение. 9.1. Архитектурная роль шаблона АЬаФгас1 Рас1огу Представьте себе, что вы разрабатываете компьютерную игру "найти и уничтожить" наподобие Ооопз или Осаке. Вы хотите соблазнить потенциального покупателя своей игрой, поэтому предусматриваете легкий уровень.

На этом уровне вражеские солдаты абсолютно тупые, монстры представляют собой желеобразную массу, а супермонстры настроены крайне дружелюбно. Ьолее крутых игроков вы соблазняете уровнем повышенной сложности. На этом уровне вражеские солдаты совершают три выстрела в секунду и владеют приемами карате, монстры коварны и вероломны, а супермонстры встречаются постоянно. Возможная модель этого ужасного мира, населенного вратами и монстрами, может содержать базовый класс впеяу и производные от него интерфейсы во1гнег, мопзтег и Бирегмопзтег. Затем на основе этих интерфейсов для реализации легкого уровня ИГРЫ создаются производные классы 57 7 7 удо)с))ег, 55 7 )умопзаег и 55 7 7 убцрегиопзтег.

В заключение для уровня повышенной сложности реализуются классы ваЖо1- ббег, вабмопзтег и вабвирегмопзтег. В результате возникает иерархия классов, представленная на рис. 9.!. Рис. 9. Д Иерархия классов для игры е двумя уровяями елояеиоети Стоит напомнить, что в вашей игре конкретизации классов ваМо1Фег и 5111умопатег никогда не "встречаются" друг с другом. Это не имело бы смысла. Игрок на легком уровне имеет дело с классами 5111у5о1дтег, 5111умопатеГ И 5111у5црегопвтеГ, а На Уровне повышенной сложности — с классами Вад5о1Нег, вадмопатег и вад5орегмопатег. Две категории типов формируют два семейства.

Во время игры всегда используются объекты лишь одного конкретного семейства, а комбинации объектов, принадлежаших разным семействам, никогда не возникаю~. Было бы прекрасно, если бы это соответствие выполнялось автоматически. В противном случае, если программист не проявил необходимой осторожности, новичок, развлекаюшийся с объектами класса 5111уво1Нег, может неожиданно встретиться в темном углу с объектом класса вадмопвтег. В этом случае обиженные игроки могут потребовать от вас возврата денег.

Поскольку лучше проявлять осторожность заранее, функции, предназначенные для создания объектов, залействованных в игре, следует объедини~ь в одном интерфейсе. 240 Часть й. Компоненты с1азз АЬзтгастеиевуеастогу ( риЫзс: ч(гтца1 5о1Фег* маке5о1озегО = 0; чзгтца1 мопзтег* макемопзтегО 0; ч(гтца1 5црегмопзсег' маке5црегмопзтегО 0; Тогда для каждого уровня сложности создается конкретная фабрика врагов, создаюшая объекты в соответствии с заданной стратегией игры. с1азз еазусече1Епевугастогу: риЫ з с АЬзтгастепевугастогу риЫзс: 5о14зег* маке5о1Фег; ( гетцгп пеи 5з11у5о1Фег; ) мопзсегь макемопзтегО ( гетцгп пеп 5(11умопзсег; ) 5црегмопзсег* маке5ирегмопзтегО ( гесигп пеп 5з 11у5ирегмопзтег; ) с1азз озеиагдсече1епевугастогу : риЫ ( с АЬзсгастепевурассогу ( рцЫ(с: 5о1дз ег* маке5о1НегО ( гетигп пеп вао5о1Нег; ) мопзтегь вакемопзтегО ( гесцгп пеп вадмопзсег; 5ирегмопзтег* маке5ирегмопзтегО ( гетигп пеп вад5ирегмопзтег; ) В заключение мы инициализируем указатель на объект класса АЬзтгастепевуеастогу соответствуюшего конкретного класса.

с1азз баведрр ( чозо 5е1естсече1О ( ( т (пользовагпель выбрал легкий уровень игры) ( ргастогу = пеи еазусече1епевуеассогу; ) е1 хе ргассогу оеи озенагдсече1епевугассогу ) ргзчасе: // используем указатель ргастогу для создания врагов АЬЗСГаетЕПЕВураетОГуь ркаСтОГу ; Преимушества этого подхола заключаются в том, что он сохраняет все детали создания и сопоставления врагов внутри двух реализаций класса АЬзтгастеастогу. Поскольку приложение использует указатель ррастогу исключительно лля ссылки на объект произволителя, соответствие объектов уровню иеры обеспечивается автоматически. Шаблон проектирования АЬзтгаст гассогу предписывает, чтобы все функции, предназначенные лля создания объектов, были сосредоточены в отдельном интерфей- Глава 9.

Шаблон АЬвпас1 гас1огу се. Затем программист должен выполнить реализацию этого интерфейса отдельно для каждого семейства создаваемых объектов. Типы, анонсированные абстрактным фабричным интерфейсом (зо1дзег, Мопзгег и зирегмопзтег), называются абстрактными изделиями (аЫгасг ргодисз). Типы, которые фактически создаются (зз11узо1д)ег, вадзо1Нег, зз11умопзтег и тд.), называются конкретными издииями (сопсгете ргодцсз). Эти термины уже встречались в главе 8.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6485
Авторов
на СтудИзбе
303
Средний доход
с одного платного файла
Обучение Подробнее