156 lines
14 KiB
Markdown
156 lines
14 KiB
Markdown
|
<p align="center">
|
|||
|
<!-- <p align="center">
|
|||
|
<img src="/" width="100%" alt="Banner">
|
|||
|
<a></a> -->
|
|||
|
<!-- </p> -->
|
|||
|
<p align="center">
|
|||
|
<a href="https://git.io/typing-svg"><img src="https://readme-typing-svg.demolab.com?font=Fira+Code&pause=1000¢er=true&vCenter=true&width=435&lines=%D0%9F%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%B5%D0%BD%D0%B8%D0%B5+-+%D0%BC%D0%B0%D1%82%D1%8C+%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F" alt="Typing SVG" /></a>
|
|||
|
</p>
|
|||
|
<p align="center">
|
|||
|
<a href="https://sites.google.com/view/dvurechensky" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/Dvurechensky-N-blue"></a>
|
|||
|
<img src="https://img.shields.io/badge/Csharp-VS2022-blue?logo=csharp&logoColor=FFFF00">
|
|||
|
</p>
|
|||
|
</p>
|
|||
|
|
|||
|
<p align="center">
|
|||
|
<h1 align="center">🔱 Шаблоны проектирования 🔱<h1>
|
|||
|
</p>
|
|||
|
|
|||
|
## Описание содержимого 💼
|
|||
|
|
|||
|
- ⌛ Определения: **class, abstract class, struct, interface, record**
|
|||
|
- ⌛ Разбор: **принципы SOLID, наследование, типы Dictionary, Unit тестирование**
|
|||
|
- ⌛ Бонус: **решение [LetCode](https://leetcode.com/) задач**
|
|||
|
- 😈 Такие паттерны как:
|
|||
|
>
|
|||
|
<h1 align="center">🌐 Behavioral - Поведенческие [11]🌐<h1><br>
|
|||
|
<table align="center">
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th>Паттерн</th>
|
|||
|
<th>Краткое определение</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/ChainOfResponsibility/Program.cs">ChainOfResponsibility</a> - Цепочка обязанностей</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Избегает связывание отправителя запроса с его получателем, давая возможность обработать запрос более чем одному объекту.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Command/Program.cs">Command</a> - Команда</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Инкапсулирует запрос в виде объекта позволяя передавать их клиентам в качестве параметров, ставить в очередь, логировать, а также поддерживать отмену операций.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Interpreter/Program.cs">Interpreter</a> - Интерпретатор</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Получая формальный язык, определяет представление его грамматики и интерпретатор, использующий это представление для обработки выражений языка.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Iterator/Program.cs">Iterator</a> - Итератор</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Предоставляет способ последовательного доступа к множеству, независимо от его внутреннего устройства.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Mediator/Program.cs">Mediator</a> - Посредник</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Определяет объект инкапсулирующий способ взаимодействия объектов. Обеспечивает слабую связь, избавляя их от необходимости ссылаться друг на друга и даёт возможность независимо изменять их взаимодействие.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Memento/Program.cs">Memento</a> - Хранитель</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Не нарушая инкапсуляцию, определяет и сохраняет внутреннее состояние объекта и позволяет позже восстановить объект в этом состоянии.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Observer/Program.cs">Observer</a> - Наблюдатель</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Определяет зависимость один ко многим между объектами так, что когда один меняет своё состояние, все зависимые объекты оповещаются и обновляются автоматически.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/State/Program.cs">State</a> - Состояние</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Позволяет объекту изменять своё поведение в зависимости от внутреннего состояния.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Strategy/Program.cs">Strategy</a> - Стратегия</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Определяет группу алгоритмов, инкапсулирует их и делает взаимозаменяемыми. Позволяет изменять алгоритм независимо от клиентов, его использующих.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/TemplateMethod/Program.cs">TemplateMethod</a> - Шаблонный метод</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Определяет алгоритм, некоторые этапы которого делегируются подклассам. Позволяет подклассам переопределить эти этапы, не меняя структуру алгоритма.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Visitor/Program.cs">Visitor</a> - Посетитель</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Представляет собой операцию, которая будет выполнена над объектами группы классов. Даёт возможность определить новую операцию без изменения кода классов, над которыми эта операция производитcя.</td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<br>
|
|||
|
<h1 align="center">💡 Creational - Порождающие [6]💡<h1><br>
|
|||
|
<table align="center">
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th>Паттерн</th>
|
|||
|
<th>Краткое определение</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/AbstractFactory/Program.cs">AbstractFactory</a> - Абстрактная фабрика</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Предоставляет интерфейс для создания групп связанных или зависимых объектов, не указывая их конкретный класс.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Builder/Program.cs">Builder</a> - Строитель</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Разделяет создание сложного объекта и его инициализацию так, что одинаковый процесс построения может может создавать объекты с разным состоянием.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/FactoryMethod/Program.cs">FactoryMethod</a> - Фабричный метод</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Определяет интерфейс для создания объекта, но позволяет подклассам решать, какой класс создавать. Позволяет делегировать создание класса объектам класса.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/FluentBuilder/Program.cs">FluentBuilder</a> - Гибкий(плавный, текучий) строитель</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Позволяет упростить процесс создания сложных объектов с помощью методов-цепочек, которые наделяют объект каким-то определенным качеством.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Prototype/Program.cs">Prototype</a> - Прототип</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Определяет несколько видов объектов, чтобы при создании использовать объект-прототип и создаёт новые объекты, копируя прототип (техника клонирования объектов).</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Singleton/Program.cs">Singleton</a> - Одиночка</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Гарантирует что класс имеет только один экземпляр и представляет глобальную точку доступа к нему.</td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<br>
|
|||
|
<h1 align="center">🏩 Structural - Структурные [7]🏩<h1><br>
|
|||
|
<table align="center">
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th>Паттерн</th>
|
|||
|
<th>Краткое определение</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Adapter/Program.cs">Adapter</a> - Адаптер</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Конвенртирует интерфейс класса в другой интерфейс, ожидаемый клиентом. Позволяет классам с разными интерфейсами работать вместе.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Bridge/Program.cs">Bridge</a> - Мост</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Разделяет абстракцию и реализацию так, чтобы они могли изменяться независимо друг от друга.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Composite/Program.cs">Composite</a> - Компоновщик</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Компонует объекты в древовидную структуру по принципу "часть-целое", представляя их в виде иерархии. Позволяет клиенту одинаково обращаться как к отдельному, так и к целому поддереву.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Decorator/Program.cs">Decorator</a> - Декоратор</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Динамически предоставляет объекту дополнительные возможности. Представляет собой гибкую альтернативу наследованию для расширения функциональности.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Facade/Program.cs">Facade</a> - Фасад</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Предоставляет единый интерфейс к группе интерфейсов подсистемы. Определяет высокоуровневый интерфейс, делая систему проще для использования.</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Flyweight/Program.cs">Flyweight</a> - Приспособленец</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Благодаря совместному использованию, поддерживает эффективную работу с большим количеством объектов. (для оптимизации работы с памятью)</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="width: 500px; padding: 18px;">💢 <a href="/Patterns/Proxy/Program.cs">Proxy</a> - Заместитель</td>
|
|||
|
<td style="width: 500px; padding: 18px;">🔎 Предоставляет объект-заместитель другого объекта для контроля доступа к нему.</td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|