Latest web development tutorials

Комбинированный режим

Комбинированный режим (Composite Pattern), также известный как часть общей картины для группы аналогичных объектов как единый объект. Комбинированный шаблон на основе древовидной структуры, чтобы объединить объект, представляющий часть и общий уровень. Этот тип шаблонов проектирования принадлежат структурной модели, она создает древовидную структуру целевой группы.

Этот шаблон создан класс содержит свою собственную группу объектов. Этот класс предоставляет способ изменить ту же группу объектов.

Мы следующими примерами, чтобы продемонстрировать применение комбинации режимов. Примеры демонстрируют иерархию сотрудников в организации.

введение

Намерение: Составьте объекты в древовидные структуры для представления "часть - целое" иерархию.Комбинированный режим позволяет пользователю использовать единый объект и композиции объектов равномерно.

Главным образом решить: Это проблема нашего дерева, размывает понятие простых элементов и сложных элементов, клиент может обрабатывать элементы , как простой для обработки сложных элементов, так что внутренняя структура разъединению клиента и сложных элементов.

Когда использовать: 1, объект , который вы хотите , чтобы представлять часть - целая иерархия (дерево).2, необходимо, чтобы разные пользователи игнорировать комбинацию объектов с одного объекта, пользователь будет совмещена единую структуру для всех объектов.

Как исправить: ветви и листья , чтобы достичь единый интерфейс, интерфейс представляет собой сочетание внутренних ветвей.

Код ключа: Древесина Внутренняя состав интерфейса, и содержит список внутренних атрибутов, которые ставят компонент.

Примеры применения: 1, арифметические выражения , включая операнды, операторы и другой операнд, который может быть другая операция оператора дерево, операторы, и другой операнд.2, JAVA AWT и SWING, для кнопки и Галочка являются листья, Контейнерный ветви дерева.

Преимущества: 1, модуль высокого уровня требует простой.2, узел увеличился свободы.

Минусы: При использовании режима комбинации, его листья и ветви , реализующие декларацию класса, вместо интерфейсов, в нарушение Принцип инверсии зависимостей.

Сценарии использования: часть, общая сцена, такие как дерево меню, файл управления папками.

Примечание: При определении конкретной категории.

реализация

У нас есть классEmployee,класс рассматривается как комбинация класса модели.CompositePatternDemo,мы продемонстрировать использование класса классEmployee, чтобы добавить иерархию отдела и печать всех сотрудников.

Сочетание модели UML диаграмма

Шаг 1

Создать классEmployee,класс со списком объектовEmployee.

Employee.java

импорт java.util.ArrayList;
импорт java.util.List;

Открытый класс Employee {
   частное имя строки;
   частная Строка отдела;
   частное INT зарплата;
   Список частных <Employee> подчиненных;

   // Конструктор государственный служащий (имя String, String Dept, Int сал) {
      this.name = имя;
      this.dept = отдел;
      this.salary = сал;
      Подчиненные = новый ArrayList <Employee> ();
   }

   общественного недействительными добавить (Служащий е) {
      subordinates.add (е);
   }

   общественного недействительными удалить (Служащий е) {
      subordinates.remove (е);
   }

   общественного List <Employee> getSubordinates () {
     вернуть подчиненных;
   }

   общественного Строка ToString () {
      вернуть ( "Сотрудник: [Имя:" + имя 
      + ", Dept:" + + Dept ", заработная плата:"
      + Зарплата + "]");
   }   
}

Шаг 2

Используйте классEmployee, чтобы создать и распечатать иерархию сотрудников.

CompositePatternDemo.java

Открытый класс CompositePatternDemo {
   государственной статической силы основных (String []) {агдз
      Генеральный директор Сотрудник = новый сотрудник ( "Джон", "генеральный директор", 30000);

      Сотрудник headSales = новый сотрудник ( "Роберт", "Руководитель по продажам", 20000);

      Сотрудник headMarketing = новый сотрудник ( "Мишель", "Руководитель по маркетингу", 20000);

      Сотрудник clerk1 = новый сотрудник ( "Лаура", "Маркетинг", 10000);
      Сотрудник clerk2 = новый сотрудник ( "Боб", "Маркетинг", 10000);

      Сотрудник salesExecutive1 = новый сотрудник ( "Ричард", "Продажи", 10000);
      Сотрудник salesExecutive2 = новый сотрудник ( "Роб", "Менеджер по продажам", 10000);

      CEO.add (headSales);
      CEO.add (headMarketing);

      headSales.add (salesExecutive1);
      headSales.add (salesExecutive2);

      headMarketing.add (clerk1);
      headMarketing.add (clerk2);

      // Печать всех сотрудников организации System.out.println (генеральный директор); 
      для (Сотрудника headEmployee: CEO.getSubordinates ()) {
         System.out.println (headEmployee);
         для (сотрудник сотрудников: headEmployee.getSubordinates ()) {
            System.out.println (работник);
         }
      }		
   }
}

Шаг 3

Проверьте выход.

Сотрудник: [Имя: Джон, отдел: генеральный директор, зарплата: 30000]
Сотрудник: [Имя: Роберт, отдел: Руководитель по продажам, зарплата: 20000]
Сотрудник: [Имя: Ричард, отдел: Менеджер по продажам, зарплата: 10000]
Сотрудник: [Имя: Роб, отдел: Менеджер по продажам, зарплата: 10000]
Сотрудник: [Имя: Мишель, отдел: Руководитель по маркетингу, зарплата: 20000]
Сотрудник: [Имя: Лаура, отдел: маркетинг, заработная плата: 10000]
Сотрудник: [Имя: Боб, отдел: маркетинг, заработная плата: 10000]