Записи с меткой «шаблон проектирования»

Разработка игры Пазлы на С++ для Android

В статье описывается разработка очередной игрушки на С++, Qt для Android. В игре вы можете собирать пазлы из своих собственных картинок (любых изображений, имеющихся на телефоне). Приложение с открытым исходным кодом, без рекламы, весит 8-10 Мб. Можно загрузить с google play, а можно — посмотреть исходники. Трудно закончить первое приложение. Дальше процесс идет проще, так …

Паттерны MVC и Publish-Subscriber

Про шаблон проектирования MVC (Model-View-Controller, Модель-Представление-Контроллер) написано множество статей. Однако, периодически я все равно встречаю непонимание и вопросы: «зачем это надо и для чего все так усложнять?». Попробую ответить на них. Кроме того, в статье описан паттерн Observer (Publish-Subscribe, наблюдатель, издатель-подписчик), часто применяющийся для организации взаимодействия модели и представления в MVC. Содержание: Модель-представление (model-view) Publish-Subscribe …

Паттерн Singleton. Описание. Пример использования

Singleton-example-UML

В статье описывается паттерн Singleton (Одиночка), рассмотрены 2 реализации и некоторые возможные модификации. Проанализированы сильные и слабые стороны шаблона. Приведен пример использования. Статья состоит из двух частей: описание шаблона, варианты реализации, проблемы. Часть должна быть понятна программистам на любых языках, хотя примеры приведены на С++; более сложный пример — решается следующая задача: Не во всех …

Многопоточный сервер Qt. Пул потоков. Паттерн Decorator

рис. 3 decorator implementation

В предыдущей статье [1] была рассмотрена работа с сокетами в библиотеке Qt. Наш сервер сетевого чата работал в одном потоке. Задача текущей статьи — описание многопоточного сервера. Однако, если сервер просто принимает сообщение и передает его всем подключенным клиентам — распараллеливать нечего и потоки не особо нужны. В связи с этим, мы немного усложним задачу …

Работа с сетью в Qt. Сокеты. Паттерн Adapter

рис. 5 диаграмма классов сетевого чата

В статье показана работа с сетью на примере очень простого сетевого чата, а также описан никак не связанный с сетью шаблон проектирования адаптер (adapter, wrapper, обертка). Несмотря на то, что наш чат максимально прост (он не позволяет передавать файлы и оффлайн-сообщения, не хранит историю, передает сообщения не шифрованными и т.д.), мы все же отделим часть, …

Применение паттернов Decorator и Prototype

рис. 3 диаграмма классов после имплементации шаблона "Прототип"

Напомню, что в прошлый раз мы написали программу, которая содержала тулбар с геометрическими фигурами и поле, на которое эти фигуры добавлялись. Для каждой фигуры был определен отдельный класс, поэтому для добавления нового типа фигуры требовалось бы перекомпилировать программу. Шаблон проектирования «Прототип» решает эту проблему, позволяя порождать новые типы объектов во время выполнения программы. Шаблон проектирования …

Паттерн шаблонный метод (template method)

рис. 2 шаблон проектирования template method

Template method представляет собой поведенческий шаблон проектирования. Вспоминать про него стоит всякий раз, когда в вашем проекте появляется дублирующийся код (именно с таким, плохим кодом он иногда может справиться). Суть шаблонного метода заключается в том, что алгоритм поведения объектов выносится в базовый класс, а реализация отдельных шагов падает на плечи классов-наследников. Рассмотрим шаблон проектирования «template …

Получение данных с сайта. Шаблон Producer/Consumer [Qt, C++]

producer-consumer-pattern

В последнее время часто встречал вопросы о получении данных с сайта на С++, поэтому решил написать статью, посвященную этой теме. В качестве примера статьи рассмотрена задача получения бесплатных проектов с одного фриланс-сайта [1]. На этом сайте, есть страница со списком проектов, на которой есть их (проектов) частичное описание и ссылка на страницу проекта, но наша …

Использование БД SQL. Шаблон проектирования «Фасад» (Facade) [C++, Qt]

рис. 1 использование паттерна Facade

Статья состоит из трёх частей, в которых: Библиотека Qt и базы данных — описаны средства библиотеки Qt, предназначенные для работы с базами данных; Шаблон проектирования Facade («Фасад») — рассмотрен паттерн проектирования «Facade». Описано каким образом его можно использовать для определения интерфейса базы данных; Пример использования баз данных на C++, Qt — приведён и описан пример …

Игра Сапер. Паттерн Mediator. Использование doxygen

рис. 1 окно игры "Сапер"

Недавно помогал какому-то студенту писать лабораторную — игру «Сапер», и получилась вполне вменяемая штука, которую решил описать на блоге. В статье рассмотрены: Паттерн Mediator (посредник) Цифровой таймер с QLCSNumber (в нашей игре будут отображаться часики); Генерация документации с помощью doxygen В результате получится игрушка, снимок окна которой показан на рис. 1.