💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №1
  • Регрессионное тестирование
  • Тестирование «белым ящиком»
  • Как делать оценку сложности?
  • Алгоритмы и сложность
  • Тестирование "белым ящиком" №2
  • Сложность алгоритмов
  • Тестирование "белым ящиком" №3
  • Тестирование "Чёрным ящиком»" №1
  • Тестирование "Черным ящиком" №2
  • Оценка сложности эвристических алгоритмов
  • Принципы ООП
  • Тестирование "Черным ящиком" №3
  • КТ - В3
  • Модульное тестирование
    • С кодами
  • Модульное тестирование
  • Абстрактные классы и интерфейсы в Python
  • Структуры в Python по аналогии с C++
    • Диалоги гениев
  • Делегаты в Python
    • Ещё более не смешные диалоги
  • Регулярные выражения в Python от простого к сложному
  • Python: Коллекции
  • Параметризованные классы (шаблоны)
  • Указатели и операции со списками в Python
  • Интеграционное тестирование
  • Работа с классами. Перегрузка методов
  • Определение операций в классе.
  • Создание наследованных классов
  • Интеграционное тестирование
  • Работа с объектами через интерфейсы
  • Использование стандартных интерфейсов
  • Работа с типом данных "Структура"
  • Коллекции. Параметризованные классы
  • Использование регулярных выражений
  • Операции со списками
  • Что такое паттерны проектирования?
  • Шпаргалка по шаблонам проектирования
    • [Habr] Шпаргалка
  • UML-диаграммы проектирования
  • Использование основных шаблонов.
  • Использование каких то там шаблонов
  • 15-я Практическая
  • 16-я Практическая
  • Graphviz Online
  • 17-я Практическая
  • Введение в теорию программирования: Объектно-ориентированный подход
  • Документирование софта и стандарты
  • C# Ввод и вывод
  • Оптимизация кода: просто о главном
  • Автоматизация разработки технической документации
  • Автоматизированное документирование и первичные данные
  • ADO.NET что это?
Powered by GitBook
On this page
  • Типы шаблонов
  • Как классы дружат между собой?
  • Список шаблонов
  • Поведенческие (про взаимодействие объектов)
  • Структурные (про удобную организацию кода)
  • Порождающие (про создание объектов)

Шпаргалка по шаблонам проектирования

10.02.2025

PreviousЧто такое паттерны проектирования?NextUML-диаграммы проектирования

Last updated 2 months ago

Что такое шаблоны проектирования?

Это как читы для кодинга – заранее придуманные решения, которые помогают писать код так, чтобы он был:

  • Читаемым

  • Гибким

  • Удобным для поддержки

Типы шаблонов

Как классы дружат между собой?

Список шаблонов

Поведенческие (про взаимодействие объектов)

  • Memento (Хранитель) – сейвим состояние объекта и можем откатить назад.

  • Chain of Responsibility (Цепочка обязанностей) – передаём запрос по цепочке, пока кто-то не обработает.

  • Observer (Наблюдатель) – один объект сообщает изменения другим.

  • Command (Команда) – превращаем запросы в объекты (как макросы).

  • State (Состояние) – поведение объекта зависит от его состояния.

  • Interpreter (Интерпретатор) – разбор и выполнение языка.

  • Strategy (Стратегия) – разные алгоритмы для одной задачи.

  • Iterator (Итератор) – удобный перебор коллекций.

  • Template Method (Шаблонный метод) – базовая структура алгоритма с настраиваемыми шагами.

  • Mediator (Посредник) – управление взаимодействием без прямых связей.

  • Visitor (Посетитель) – добавляем новую логику без изменения классов.

Структурные (про удобную организацию кода)

  • Adapter (Адаптер) – заставляет несовместимые интерфейсы работать вместе.

digraph AdapterPattern {
    node [shape=box];

    Adapter [label="«interface»\nAdapter\n+operation()"];
    Client [label="Client"];
    ConcreteAdapter [label="ConcreteAdapter\n-adaptee\n+operation()"];
    Adaptee [label="Adaptee\n+adaptedOperation()"];


    ConcreteAdapter -> Adapter [arrowhead=onormal];
    Client -> Adapter [arrowhead=normal];
    ConcreteAdapter -> Adaptee [arrowhead=normal];
}
  • Proxy (Прокси) – ставит объект-посредник для контроля доступа.

digraph ProxyPattern {
    node [shape=box];

    Client [label="Client"];
    Subject [label="«interface»\nSubject\n+request()"];
    RealSubject [label="RealSubject\n+request()"];
    Proxy [label="Proxy\n+request()"];

    Client -> Subject [arrowhead=normal]; 
    RealSubject -> Subject [arrowhead=onormal];
    Proxy -> Subject [arrowhead=onormal]; 
    Proxy -> RealSubject [arrowhead=normal, label="представляет"]; 
}
  • Bridge (Мост) – отделяет интерфейс от реализации.

digraph BridgePattern {
    node [shape=box];

    Abstraction [label="Abstraction\n+operation()"];
    Implementor [label="«interface»\nImplementor\n+operationImpl()"];
    ConcreteImplementorA [label="ConcreteImplementorA\n+operationImpl()"];
    ConcreteImplementorB [label="ConcreteImplementorB\n+operationImpl()"];

    Implementor -> Abstraction [arrowhead=diamond];
    ConcreteImplementorA -> Implementor [arrowhead=onormal];
    ConcreteImplementorB -> Implementor [arrowhead=onormal];
}
  • Composite (Компоновщик) – работаем с деревьями объектов как с одним.

digraph CompositePattern {
    node [shape=box];

    Component [label="«interface»\nComponent\n+operation()\n+add(in c : Composite)\n+remove(in c : Composite)\n+getChild(in i : int)"];
    Leaf [label="Leaf\n+operation()"];
    Composite [label="Composite\n+operation()\n+add(in c : Composite)\n+remove(in c : Composite)\n+getChild(in i : int)"];

    Leaf -> Component [arrowhead=onormal];
    Composite -> Component [arrowhead=onormal, style=dashed];
    Component -> Composite [arrowhead=diamond];
}
  • Decorator (Декоратор) – добавляет объекту новые возможности без изменения кода.

digraph DecoratorPattern {
    node [shape=box];

    Component [label="«interface»\nComponent\n+operation()"];
    ConcreteComponent [label="ConcreteComponent\n+operation()"];
    Decorator [label="Decorator\n+operation()"];
    ConcreteDecorator [label="ConcreteDecorator\n-addedState\n+operation()\n+addedBehavior()"];

    ConcreteComponent -> Component [arrowhead=onormal];
    Decorator -> Component [arrowhead=onormal];
    ConcreteDecorator -> Decorator [arrowhead=onormal];
    Component -> Decorator [arrowhead=diamond];
}
  • Facade (Фасад) – даёт простой интерфейс к сложной системе.

digraph FacadePattern {
    node [shape=box];

    Facade [label="Facade"];
    Subsystem1 [label="Subsystem1"];
    Subsystem2 [label="Subsystem2"];
    Subsystem3 [label="Subsystem3"];
    Subsystem4 [label="Subsystem4"];

    Facade -> Subsystem1 [arrowhead=normal];
    Facade -> Subsystem2 [arrowhead=normal];
    Facade -> Subsystem3 [arrowhead=normal];
    Facade -> Subsystem4 [arrowhead=normal];
}
  • Flyweight (Приспособленец) – экономим память, используя повторяющиеся объекты.

digraph FlyweightPattern {
    node [shape=box];

    FlyweightFactory [label="FlyweightFactory\n+getFlyweight(in key)"];
    Flyweight [label="«interface»\nFlyweight\n+operation(in extrinsicState)"];
    ConcreteFlyweight [label="ConcreteFlyweight\n-intrinsicState\n+operation(in extrinsicState)"];
    UnsharedConcreteFlyweight [label="UnsharedConcreteFlyweight\n-allState\n+operation(in extrinsicState)"];
    Client [label="Client"];

    FlyweightFactory -> Flyweight [arrowhead=diamond];
    Client -> FlyweightFactory [arrowhead=normal];
    ConcreteFlyweight -> Flyweight [arrowhead=onormal];
    UnsharedConcreteFlyweight -> Flyweight [arrowhead=onormal];
    Client -> ConcreteFlyweight [arrowhead=normal];
}

Порождающие (про создание объектов)

  • Abstract Factory (Абстрактная фабрика) – создаёт семейства объектов.

  • Builder (Строитель) – пошагово собираем сложный объект.

  • Factory Method (Фабричный метод) – создание объектов делегируется подклассам.

  • Prototype (Прототип) – клонируем объекты вместо создания с нуля.

  • Singleton (Одиночка) – гарантируем, что объект будет один на весь проект.

— Порождающие (создают объекты по умному)

— Структурные (упрощают структуру кода)

— Поведенческие (контролируют взаимодействие объектов)

Агрегация – объект A использует объект B, но B может существовать без A.

Композиция – объект A содержит B, и B без A – ничто.

Зависимость – A зависит от B (если B ломается, то A тоже).

Обобщение – A наследует B или реализует интерфейс B.

Шпаргалка по шаблонам проектированияHabr
Logo