Комбинированный режим
Объединение объектов в виде древовидной структуры , чтобы представить «часть - целое» иерархии. Композит , имеющий последовательность , например , что один пользовательские объекты и комбинации объектов.
Композитный шаблон
Compose объекты в древовидные структуры для представления partwhole иерархий. Композитный позволяет клиентам рассматривать индивидуальные объекты и композиции объектов равномерно.
I. Обзор
Комбинированный режим о том, как объекты образуют древовидную структуру, чтобы представить общую модель зрелости и иерархии раздела. Используя комбинацию режимов, что позволяет пользователь в согласованном порядке отдельных объектов и комбинации объектов, ключ лежит в комбинированном режиме, будь то отдельный объект или сочетание объектов все реализует один и тот же интерфейс или абстрактный класс того же подкласс.
Во-вторых, сочетание структуры и режима
Структурная модель включает в себя три роли:
• абстрактного компонента (компонент)
• Композитный узел (узел Composite)
• листовой узел (листовой узел)
диаграммы классов UML
реализация
1. Абстрактный компонент (компонент): MilitaryPerson.java
импорт java.util *. ; публичный интерфейс MilitaryPerson { общественного недействительными добавить (MilitaryPerson человек); общественного недействительными удалить (MilitaryPerson человек); общественный MilitaryPerson GetChild ( INT индекс); общественный итератор <MilitaryPerson> getAllChildren (); общественное логическое IsLeaf (); общественности двойной getSalary (); общественного недействительная setSalary ( двойная заработная плата); }
2. Композитный 节点 (Composite Node): MilitaryOfficer.java
импорт java.util *. ; общественный класс MilitaryOfficer реализует MilitaryPerson { LinkedList <MilitaryPerson> список; Имя строки; двойная заработная плата; MilitaryOfficer (имя String, двойная зарплата) { это .name = имя; это .salary = заработная плата; список = новый LinkedList <MilitaryPerson> (); } Общественного недействительными добавить (MilitaryPerson человек) { list.add (человек); } общественного недействительными удалить (MilitaryPerson человек) { list.remove (человек); } Общественного MilitaryPerson GetChild ( INT индекс) { вернуться list.get (индекс); } Общественного итератора <MilitaryPerson> getAllChildren () { возвращение list.iterator (); } Общественного логический IsLeaf () { вернуться ложным ; } Общественное двойное getSalary () { вернуть зарплату; } Общественной недействительная setSalary (двойная заработная плата) { это .salary = заработная плата; } }
3. Узел листьев (листовой узел): MilitarySoldier.java
импорт java.util *. ; общественный класс MilitarySoldier реализует MilitaryPerson { двойную зарплату; Имя строки; MilitarySoldier (имя String, двойная зарплата) { это .name = имя; это .salary = заработная плата; } Общественного недействительными добавить (MilitaryPerson человек) {} общественного недействительными удалить (MilitaryPerson человек) {} общественного MilitaryPerson GetChild ( INT индекс) { возвращение нуль ; } общественногоИтератор <MilitaryPerson> getAllChildren () { возвращение нуль ; } Общественного логический IsLeaf () { вернуться верно ; } Общественное двойное getSalary () { вернуть зарплату; } Общественной недействительная setSalary ( двойная заработная плата) { это .salary = заработная плата; } }
4. _1 Применение: ComputerSalary.java
импорт java.util *. ; общественный класс ComputerSalary { общественный статический двойной computerSalary (MilitaryPerson человек) { двойной сумма = 0 ; если (person.isLeaf () == истинно ) { сумма = сумма + person.getSalary (); } Если (person.isLeaf () == ложно ) { сумма = сумма + person.getSalary (); Итератора <MilitaryPerson> итераторы = person.getAllChildren (); в то время как (iterator.hasNext ()) { MilitaryPerson р = iterator.next (); сумма= сумма + computerSalary (р) ;; } } Вернуть сумму; } }