You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+137-1Lines changed: 137 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -920,7 +920,143 @@ public class AgeWorkersFilter : AdditionalFilteringCondition
920
920
:x:__Недостатки__: в результате получается большое число мелких объектов, которые друг на друга похожи и отличаются способом взаимосвязи.
921
921
___
922
922
### Компоновщик
923
-
__Компоновщик (Composite)__ -
923
+
__Компоновщик (Composite)__ - это структурный паттерн проектирования, который используется, когда объекты должны быть реализованы в виде древовидной структуры и когда клиенты аналогично управляют как целыми объектами, так и составными частями.<br>
924
+
> :white_check_mark: Реализуем данный паттерн на примере файловой системы.
925
+
926
+
:one: Создадим абстрактный класс компонента файловой системы, единственное поле у которого будет название компонента. Мы также можем добавлять в компонент другие компоненты и аналогично удалять их.<br>
927
+
```C#
928
+
/// <summary>
929
+
/// Компонент файловой системы.
930
+
/// </summary>
931
+
publicabstractclassFileSystemComponent
932
+
{
933
+
/// <summary>
934
+
/// Название.
935
+
/// </summary>
936
+
protectedstring_name;
937
+
938
+
/// <summary>
939
+
/// Создание компонента файловой системы с помощью указанных параметров.
/// Строковое преставление объекта компонента файловой системы.
982
+
/// </summary>
983
+
/// <returns>Данные объекта компонента файловой системы в виде строки.</returns>
984
+
publicoverridestringToString() =>_name;
985
+
}
986
+
```
987
+
:two: Создадим первый класс-наследник компонента файловой системы: файл. У файла не будут переопределены методы добавления и удаления - базовая реализация нас вполне устраивает, поскольку мы не может добавлять в файл другие файлы.
988
+
```C#
989
+
/// <summary>
990
+
/// Файл.
991
+
/// </summary>
992
+
publicclassFile : FileSystemComponent
993
+
{
994
+
/// <summary>
995
+
/// Создание файла с помощью указанных параметров.
996
+
/// </summary>
997
+
/// <paramname="name">Название файла.</param>
998
+
publicFile(stringname)
999
+
: base(name)
1000
+
{
1001
+
}
1002
+
}
1003
+
```
1004
+
:three: Добавим второй класс-наследник компонента файловой системы: папка. У папки будет список компонентов файловой системы, поскольку в папку мы уже можем добавить как другие файлы, так и другие папки. Также будут переопределены методы добавления и удаления компонентов файловой системы из директории.
1005
+
```C#
1006
+
/// <summary>
1007
+
/// Папка.
1008
+
/// </summary>
1009
+
publicclassDirectory : FileSystemComponent
1010
+
{
1011
+
/// <summary>
1012
+
/// Список компонентов файловой системы, которые находятся в папке.
__Поведенческие паттерны__ (Behavioral) описывают способы реализации взаимодействия между объектами с отличающимися типами. При таком взаимодействии объекты могут решать более трудные задачи, чем если бы они решали их по-отдельности.
0 commit comments