Інженерний дизайн та аналіз
Дизайнерські шаблони в C++: Практичні приклади та стратегії вирішення проблем
Table of Contents
У C++ ми допоможемо покращити роботу з використанням програмного забезпечення, реузабельності та підтримки. У статті досліджуються практичні приклади популярних моделей дизайну та як їх можна застосувати для вирішення реальних проблем у світі.
Одиночний візерунок
У програмі Oneton передбачено, що клас має лише одну екземпляр і надає глобальну точку доступу до неї. Він корисний для управління загальними ресурсами, такими як налаштування конфігурації або системи заправки.
Приклад виконання:
Код:]
`````cpp class Logger { private: static Logger* екземпляр; Logger() {} громадськість: статичний Logger* getInstance() { if (!instance) { екземпляр = новий Logger(); } } } } } } } } }; ````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
Фабричний метод шаблон
Патерн Фабричний метод визначає інтерфейс для створення об'єктів, але дозволяє підкласи змінювати тип об'єктів, які будуть створені. Він сприяє розпушуванню та масштабованості.
Приклад сценарію: створення різних видів документів.
Код:]
````cpp class Document { громадськість: віртуальна неїдна будова() = 0; віртуальна ~ документація() {} }; клас PDFДокумент : публічний документ { громадський: недійсний створення() наднаряддя { // Створити PDF-документацію; клас WordDocument() = 0; віртуальний ~DocumentFactory()) наділений { // Створити документ Word; клас Документація: громадський метод { uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk uk
Список учасників
У статті спостерігача встановлено одноосібну залежність між об’єктами, щоб при зміні одного об’єкта, всі його залежності автоматично означають. Корисно для реалізації систем обробки подій.
Приклад: простий західний комплекс, де кілька спостерігачів відповідають на зміну.
Код:]
`````cpp #включає в себе клас спостерігача { громадськість: віртуальне оновлення недійсне = 0; віртуальне ~Observer() {}; class Тема { private: std:vectorlistrs; громадськість: недійсний прикріпок(Observer) {listrs.push back(observer) } } back(observer) { для (auto* спостерігач : спостерігачі) { спостерігачі) {listr->update();;;;;`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````