ПАТЕРНИ ПРОЕКТУВАННЯ на Rust
Каталог Rust прикладів
Породжувальні патерни
![Абстрактна фабрика](/images/patterns/cards/abstract-factory-mini.png?id=4c3927c446313a38ce77dfee38111e27)
Абстрактна фабрика
Дає змогу створювати сімейства пов’язаних об’єктів, не прив’язуючись до конкретних класів створюваних об’єктів.
![Будівельник](/images/patterns/cards/builder-mini.png?id=19b95fd05e6469679752c0554b116815)
Будівельник
Дає змогу створювати складні об'єкти крок за кроком. Будівельник дає можливість використовувати один і той самий код будівництва для отримання різних відображень об'єктів.
![Фабричний метод](/images/patterns/cards/factory-method-mini.png?id=72619e9527893374b98a5913779ac167)
Фабричний метод
Визначає загальний інтерфейс для створення об'єктів у суперкласі, дозволяючи підкласам змінювати тип створюваних об'єктів.
![Прототип](/images/patterns/cards/prototype-mini.png?id=bc3046bb39ff36574c08d49839fd1c8e)
Прототип
Дає змогу копіювати об'єкти, не вдаючись у подробиці їхньої реалізації.
![Одинак](/images/patterns/cards/singleton-mini.png?id=914e1565dfdf15f240e766163bd303ec)
Одинак
Гарантує, що клас має лише один екземпляр, та надає глобальну точку доступу до нього.
Структурні патерни
![Адаптер](/images/patterns/cards/adapter-mini.png?id=b2ee4f681fb589be5a0685b94692aebb)
Адаптер
Дає змогу об’єктам із несумісними інтерфейсами працювати разом.
![Міст](/images/patterns/cards/bridge-mini.png?id=b389101d8ee8e23ffa1b534c704d0774)
Міст
Розділяє один або кілька класів на дві окремі ієрархії — абстракцію та реалізацію, дозволяючи змінювати код в одній гілці класів, незалежно від іншої.
![Компонувальник](/images/patterns/cards/composite-mini.png?id=a369d98d18b417f255d04568fd0131b8)
Компонувальник
Дає змогу згрупувати декілька об'єктів у деревоподібну структуру, а потім працювати з нею так, ніби це одиничний об'єкт.
![Декоратор](/images/patterns/cards/decorator-mini.png?id=d30458908e315af195cb183bc52dbef9)
Декоратор
Дає змогу динамічно додавати об'єктам нову функціональність, загортаючи їх у корисні «обгортки».
![Фасад](/images/patterns/cards/facade-mini.png?id=71ad6fa98b168c11cb3a1a9517dedf78)
Фасад
Надає простий інтерфейс до складної системи класів, бібліотеки або фреймворку.
![Легковаговик](/images/patterns/cards/flyweight-mini.png?id=422ca8d2f90614dce810a8812c626698)
Легковаговик
Дає змогу вмістити більшу кількість об'єктів у відведеній оперативній пам'яті. Легковаговик заощаджує пам'ять, розподіляючи спільний стан об'єктів між собою, замість зберігання однакових даних у кожному об'єкті.
![Замісник](/images/patterns/cards/proxy-mini.png?id=25890b11e7dc5af29625ccd0678b63a8)
Замісник
Дає змогу підставляти замість реальних об'єктів спеціальні об'єкти-замінники. Ці об'єкти перехоплюють виклики до оригінального об'єкта, дозволяючи зробити щось до чи після передачі виклику оригіналові.
Поведінкові патерни
![Ланцюжок обов'язків](/images/patterns/cards/chain-of-responsibility-mini.png?id=36d85eba8d14986f053123de17aac7a7)
Ланцюжок обов'язків
Дає змогу передавати запити послідовно ланцюжком обробників. Кожен наступний обробник вирішує, чи може він обробити запит сам і чи варто передавати запит далі ланцюжком.
![Команда](/images/patterns/cards/command-mini.png?id=b149eda017c0583c1e92343b83cfb1eb)
Команда
Перетворює запити на об'єкти, дозволяючи передавати їх як аргументи під час виклику методів, ставити запити в чергу, логувати їх, а також підтримувати скасування операцій.
![Ітератор](/images/patterns/cards/iterator-mini.png?id=76c28bb48f997b36965983dd2b41f02e)
Ітератор
Дає змогу послідовно обходити елементи складових об'єктів, не розкриваючи їхньої внутрішньої організації.
![Посередник](/images/patterns/cards/mediator-mini.png?id=a7e43ee8e17e4474737b1fcb3201d7ba)
Посередник
Дає змогу зменшити зв'язаність великої кількості класів між собою, завдяки переміщенню цих зв'язків до одного класу-посередника.
![Знімок](/images/patterns/cards/memento-mini.png?id=8b2ea4dc2c5d15775a654808cc9de099)
Знімок
Дає змогу зберігати та відновлювати минулий стан об'єктів, не розкриваючи подробиць їхньої реалізації.
![Спостерігач](/images/patterns/cards/observer-mini.png?id=fd2081ab1cff29c60b499bcf6a62786a)
Спостерігач
Створює механізм підписки, що дає змогу одним об’єктам стежити й реагувати на події, які відбуваються в інших об’єктах.
![Стан](/images/patterns/cards/state-mini.png?id=f4018837e0641d1dade756b6678fd4ee)
Стан
Дає змогу об'єктам змінювати поведінку в залежності від їхнього стану. Ззовні створюється враження, ніби змінився клас об'єкта.
![Стратегія](/images/patterns/cards/strategy-mini.png?id=d38abee4fb6f2aed909d262bdadca936)
Стратегія
Визначає сімейство схожих алгоритмів і розміщує кожен з них у власному класі. Після цього алгоритми можна заміняти один на інший прямо під час виконання програми.
![Шаблонний метод](/images/patterns/cards/template-method-mini.png?id=9f200248d88026d8e79d0f3dae411ab4)
Шаблонний метод
Визначає кістяк алгоритму, перекладаючи відповідальність за деякі його кроки на підкласи. Патерн дозволяє підкласам перевизначати кроки алгоритму, не змінюючи його загальної структури.
![Відвідувач](/images/patterns/cards/visitor-mini.png?id=854a35a62963bec1d75eab996918989b)
Відвідувач
Дає змогу додавати до програми нові операції, не змінюючи класи об'єктів, над якими ці операції можуть виконуватися.