пятница, 7 октября 2011 г.

Как паттерн Компоновщик подружился с .NET

Наверняка каждый прогер знаком с паттерном "Компоновщик", неоднократно с ним встречался и реализовывал в каждой второй своей программе. Но всегда ли мы реализуем его "как в книжке", или же немного иначе? Как достичь еще большей эффективности при его использовании в приложениях на конкретном языке, например на C#? В этом посте я не открою Америку, не изобрету велосипед, а просто попытаюсь реализовать паттерн более-менее разумным способом для решения более-менее широкого круга задач.

Компоновщик - очень полезный паттерн, позволяющий воспринимать часть как целое, а целое как часть. Это обеспечивает нас возможностью взаимодействовать с иерархическими структурами практически неограниченного уровня вложенности элементов (компонентов). При этом все компоненты имеют прозрачный интерфейс, поэтому, используя компоновщик, мы освобождаемся от необходимости постоянно сверять фактический тип элемента с ожидаемым. Паттерн как бы говорит "все просто: используй Operation( ), а об остальном позаботятся сами компоненты".