В этом примере описывается использование комбинированного режима для реализации функции представления организационной структуры компании. Поделитесь этим для вашей ссылки, следующим образом:
1. Определение шаблона
Комбинированный режим: объединение объектов в структуру дерева, чтобы представлять «частично целую» иерархию. Комбинированный режим делает пользователей в соответствии с использованием отдельных объектов и комбинированных объектов.
2. Примеры комбинированных режимов
1 Анализ шаблона
Мы заимствуем организационную карту компании, чтобы проиллюстрировать эту модель.
После анализа мы получаем статическую классовую диаграмму этой схемы следующим образом:
2 примеры кода
2.1 Установить абстрактные занятия сотрудников
пакет com.demo.composite;/** * Интерфейс класса сотрудников * * @author * */public Abstract Class staff {// Номер сотрудника защищенная строка no; // Имя сотрудника Защищенное имя строки; // позиция защищенная строковая позиция; // Зарплата защищенная зарплата поплавкой; // Строка личной недвижимости Private Int Length; // Создание метода общественного персонала (строка №, имя строки, позиция строки, зарплата плавания) {this.no = no; this.name = name; this.position = position; это .salary = зарплата; // Рассчитайте общую длину байта this.length += (no == null || "" .equals (№ trim ()))? 0: № GetBytes (). Длина; this.length += (name == null || "" .equals (name.trim ()))? 0: name .getBytes (). Length; this.length += (position == null || "" .equals (position.trim ()))? 0: position.getBytes (). Length; this.length += string.valueof (зарплата) .getbytes (). Length; } // Получить базовую информацию пользователя public void printuserbaseinfo () {System.out.println ("|" + this.no + "" + this.name + "" + this.position + "" + this.salary); } // Добавить информацию о сотруднике Public Abstract void Add (Персонал); // Удалить сотрудник Общественного абстрактного абстрактного сотрудника (String no); // Печать информации сотрудника Public Abstract void PrinteMployEesInfo (int Layer); // Распечатать несколько символов Protected void printchar (int layer) {for (int j = 0; j <слой * 2; j ++) {System.out.print ("-"); }} // Частный метод печатает линию защищенную void printline () {System.out.print ("+"); for (int i = 0; i <this.length+4; i ++) {System.out.print ("-"); } System.out.println ("-"); } public String getNo () {return no; } public void setno (string no) {this.no = no; } public String getName () {return name; } public void setName (string name) {this.name = name; } public String getPosition () {return Position; } public void setPosition (строковая позиция) {this.position = position; } public float getSalary () {return Parlary; } public void setSalary (платная зарплата) {this.salary = зарплата; }}2.2 Создать менеджера
Пакет com.demo.composite.sub; import java.util.arraylist; import com.demo.composite.staff;/** * Менеджер (кто -то с другими сотрудниками под его командованием) * * @author * */public Class Manager extends {// Магазин информации о сотрудниках частного окончательного ArrayList <ship> ArrayList = new ArrayList <) (); // Создание метода Public Manager (строка №, имя строки, позиция строки, зарплата плавания) {super (no, имя, позиция, зарплата); } / *** Добавить сотрудника* / @Override public void add (персонал) {this.ArrayList.add (персонал); } / *** Удалить информацию о сотруднике* / @Override Общественный персонал удалить (строка no) {персонал = null; if (no! = null &&! ". } if (№ equals (this.arraylist.get (i) .getno ())) {heft = this.arraylist.remove (i); перерыв; }}} возвращать персонал; } / *** Печать информации сотрудников* / @Override public void printemployeeesInfo (int layer) {int tmPlayer = ++ layer; for (int i = 0; i <this.arraylist.size (); i ++) {if (this.arraylist.get (i) == null) {продолжить; } // print '-' printChar (tmPlayer); // Распечатать базовую информацию о сотруднике this.arraylist.get (i) .printuserbaseinfo (); // Распечатать информацию о сотруднике в соответствии с вами. }}}2.3 Создайте обычных сотрудников
пакет com.demo.composite.sub; import com.demo.composite.staff;/** * обычные сотрудники (действительно работают) * * @author * */public Class Сотрудники расширяют персонал {// метод создания общественных сотрудников (строка no, название строки, строковая позиция, платная зарплата) {Super (no, имя, позиция, заработная плата); } / *** Добавить информацию о сотруднике* / @Override public void add (персонал) {return; } / *** Удалить информацию о сотруднике* / @Override Public Maff Remove (String no) {// return null непосредственно возвращает NULL; } / *** Печать информации сотрудников* / @Override public void printeMployeeSinfo (int layer) {return; }}2.4 Клиентское тестирование
package com.demo;import com.demo.composite.Staff;import com.demo.composite.sub.Employees;import com.demo.composite.sub.Manager;/** * Main application* * @author * */public class Client{ /** * @param args */ public static void main(String[] args) { // Company CEO Staff boss = new Manager("1", "Big Босс "," Генеральный директор ", 100000); / *** У генерального директора есть несколько менеджеров департаментов*/ // Менеджер по финансам финансового департамента FinanceManager = новый менеджер («11», «Президент Чжан», «Менеджер финансового департамента», 60000); // Менеджер по персоналу = новый менеджер («12», «Президент Ван», «Президент менеджер», 60000); // персонал Technical Manager = новый менеджер («13», «Президент Чен», «Менеджер технического департамента», 60000); / *** Есть также помощники и несколько руководителей в техническом отделе*/ // персонал Deptassistant = новый менеджер («1301», «Помощник Ван», «Помощник департамента», 20000); // Технический отдел управляющего департаментом1 DEPTMANAGER1 = новый менеджер («1302», «Supervisor1», «Технический руководитель», 30000); / ** * Технический руководитель DEPTMANAGER1 Существует инженеры -программисты (человек, который работает в конце концов) */ reffect SoftwareNegneer1 = новые сотрудники («1302001», «Zhang San», «Инженер программного обеспечения», 5000); Персонал SoftwareNegneer2 = новые сотрудники («1302002», «Li Si», «Инженер -программист», 5500); Staff SoftwareNegneer3 = новые сотрудники («1302003», «Ван Ву», «Инженер -программист», 4500); // Добавить информацию о сотруднике для технического директора 1 DEPTMANAGER1.ADD (SoftwareNigner1); deptmanager1.add (SoftwareNigner2); deptmanager1.add (SoftwareNigner3); // Директор технического департамента 2 сотрудников DEPTMANAGER2 = новый менеджер («1303», «Supervisor2», «Технический директор», 30000); // Добавить к менеджеру технического отдела: помощник департамента, технический директор 1 и технический директор 2 Technical Manager.add (Deptassistant); Technical Manager.add (deptmanager1); Technical Manager.add (deptmanager2); // Менеджер по маркетингу персонал MarketingManager = новый менеджер («14», «г -н Ву», «Менеджер рынка», 60000); // Добавить к генеральному директору: менеджер финансового отдела, менеджер отдела кадров, менеджер по техническому департаменту и менеджер по маркетингу Boss.Add (FinanceManager); Boss.Add (Personnelmanager); Boss.Add (Technical Manager); Boss.Add (MarketingManager); // Печать информации генерального директора Boss.printuserBaseInfo (); // Печать информационной информации сотрудника Boss.printemployeeSinfo (1); }}Результаты работы следующие:
| 1 генеральный директор Big Boss 100000.0
--- | 11 Генеральный менеджер финансового департамента Чжан 60000.0
--- | 12 Генеральный менеджер отделения кадров Ванг 60000.0
--- | 13 Генеральный менеджер технического отделения 60000.0
------ | 1301 Помощник по ассистенту департамента Ванга 20000.0
----- | 1302 Supervisor 1 Технический руководитель 30000.0
------- | 1302001 Zhang San Sworking Engineer 5000.0
------- | 1302002 Li Si-инженер 5500.0
------- | 1302003 Wang Wu Skrienge Innegnier 4500.0
------ | 1303 Supervisor 2 Технический руководитель 30000.0
--- | 14 Генеральный менеджер WU Marketing Department 60000.0
3. Принципы дизайна этой модели
1 Обработка индивидуальных и комбинированных объектов равномерно
2 абстрактные ориентированные программы
4. Используйте случаи
1 Когда вы хотите представить «частичную и целую» иерархию объекта.
2 Когда пользователь хочет игнорировать разницу между комбинированным объектом и одним объектом, пользователь будет использовать все объекты в комбинированной структуре равномерно.
Статическая классовая диаграмма комбинированной режима заключается в следующем
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.