Компоновщик (Composite)¶
Composite позволяет работать с одиночными объектами и деревьями объектов через единый контракт.
Опора на ООП¶
Composite опирается на полиморфизм и интерфейсы: и лист, и группа реализуют один и тот же контракт, поэтому клиенту не нужно знать, перед ним один узел или целая ветка.
Что показывает пример на 1С¶
DataProcessors.ValidationGroupхранит дочерние узлы и сам реализует тот же методValidate(Context), что и листья.RequiredFieldRuleиPositiveAmountRuleвыступают как листья дерева правил.- Клиент может запускать одну и ту же проверку и для одного правила, и для целой группы правил.
Пример¶
Rules = DataProcessors.ValidationGroup.Create();
RequiredRule = DataProcessors.RequiredFieldRule.Create();
RequiredRule.Init("Partner");
AmountRule = DataProcessors.PositiveAmountRule.Create();
AmountRule.Init("Amount");
Rules.Add(RequiredRule);
Rules.Add(AmountRule);
If Rules.Validate(DocumentData) Then
Message("Validation passed");
EndIf;
Где полезен в 1С¶
- для деревьев проверок, фильтров и маршрутов согласования;
- для меню, настроек и иерархий команд;
- когда одинаковая операция должна работать и на листе, и на группе элементов.
Когда паттерн лишний¶
- если структура не образует дерево;
- если листья и группы ведут себя слишком по-разному;
- если плоский список правил читается проще.