Contoh ini menjelaskan penggunaan mode kombinasi untuk mengimplementasikan fungsi mewakili struktur organisasi perusahaan. Bagikan untuk referensi Anda, sebagai berikut:
1. Definisi Pola
Mode Kombinasi: Menggabungkan objek ke dalam struktur pohon untuk mewakili hierarki "seluruh utuh". Mode kombinasi membuat pengguna konsisten dengan penggunaan objek individual dan objek gabungan.
2. Contoh mode kombinasi
1 analisis pola
Kami meminjam bagan organisasi perusahaan untuk menggambarkan model ini.
Setelah analisis, kami mendapatkan diagram kelas statis dari pola ini sebagai berikut:
2 contoh kode
2.1 Menetapkan kelas abstrak karyawan
Paket com.demo.composite;/** * Antarmuka kelas karyawan * * @author * */staf kelas abstrak publik {// nomor karyawan yang dilindungi string no; // nama karyawan nama string yang dilindungi; // posisi posisi string yang dilindungi; // gaji gaji pelampung yang dilindungi; // Private Properti Panjang String Private Int Length; // Metode Bangun Staf Publik (String No, String Name, Posisi String, Float Gaji) {this.no = no; this.name = name; this.position = position; this.salary = gaji; // Hitung total panjang byte this.length += (no == null || "" .Equals (No.Trim ()))? 0: No.GetBytes (). Panjang; this.length += (name == null || "" .Equals (name.trim ()))? 0: name .getbytes (). Panjang; this.length += (position == null || "" .Equals (position.trim ()))? 0: position.getbytes (). Panjang; this.length += string.ValueOf (gaji) .getBytes (). Panjang; } // Dapatkan informasi pengguna dasar public void printuserbaseInfo () {System.out.println ("|" + this.no + "" + this.name + "" + this.position + "" + this.salary); } // Tambahkan informasi karyawan abstrak public abstrak add (staf staf); // hapus staf abstrak publik karyawan hapus (string no); // cetak informasi karyawan abstrak publik void printemployeesinfo (int layer); // Cetak beberapa karakter yang dilindungi void printChar (int layer) {for (int j = 0; j <layer * 2; j ++) {System.out.print ("-"); }} // Metode privat mencetak line void printLine () {System.out.print ("+"); untuk (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 (name string) {this.name = name; } public string getPosition () {Posisi return; } public void setPosition (posisi string) {this.position = position; } public float getSalary () {return gaji; } public void setSalary (float gaji) {this.salary = gaji; }}2.2 Buat manajer
package com.demo.composite.sub;import java.util.ArrayList;import com.demo.composite.Staff;/** * Manager (someone with other employees under his command) * * @author * */public class Manager extends Staff { // Store information about employees private final ArrayList<Staff> arrayList = new ArrayList<Staff>(); // Metode Bangun Manajer Publik (String No, Name String, Posisi String, Gaji Float) {Super (Tidak, Nama, Posisi, Gaji); } / *** Tambahkan karyawan* / @Override public void add (staf staf) {this.arraylist.add (staf); } / *** Hapus informasi karyawan* / @Override Staf publik Hapus (string no) {staf staf = null; if (tidak! = null &&! "". Equals (No.Trim ())) {for (int i = 0; i <this.arraylist.size (); i ++) {if (this.arraylist.get (i) == null) {lanjutkan; } if (No.Equals (this.arraylist.get (i) .getno ())) {staff = this.arraylist.remove (i); merusak; }}} mengembalikan staf; } / *** Cetak Informasi Karyawan* / @Override Void Public CetakeesInfo (Int Layer) {int tMplayer = ++ layer; untuk (int i = 0; i <this.arraylist.size (); i ++) {if (this.arraylist.get (i) == null) {lanjutkan; } // cetak '-' printchar (tmplayer); // cetak informasi karyawan dasar this.arraylist.get (i) .printuserbaseInfo (); // cetak informasi karyawan di bawah posting Anda this.arraylist.get (i) .printemployeesInfo (tmplayer); }}}2.3 Buat karyawan biasa
Paket com.demo.composite.sub; import com.demo.composite.staff;/** * Karyawan biasa (benar -benar berfungsi) * * @author * */karyawan kelas publik memperluas staf {// membangun metode karyawan publik (tidak ada string, nama string, gaji float) {no, nama, posisi, gaji); } / *** Tambahkan informasi karyawan* / @Override public void add (staf staf) {return; } / *** Hapus informasi karyawan* / @Override Staf publik Hapus (string no) {// kembalikan null langsung mengembalikan null; } / *** Cetak Informasi Karyawan* / @Override Void Public CetakeesInfo (Int Layer) {return; }}2.4 Pengujian Klien
Paket com.demo; import com.demo.composite.staff; import com.demo.cosite.sub.employees; import com.demo.cosite.sub.manager;/** * Aplikasi utama * * @Author *, klien kelas publik {/** * @param args */public static void main (string public [] {/** @param args */public static void Main Main (public string [string [] [] {/** @param args */public static void Main Mainatic (string [string [] {/** Bos "," CEO ", 100000); / *** CEO memiliki beberapa manajer departemen*/ // Manajer Departemen Keuangan FinanceManager = Manajer Baru ("11", "Presiden Zhang", "Manajer Departemen Keuangan", 60000); // Manajer Personalia Staf = Manajer Baru ("12", "Presiden Wang", "Presiden Manajer", 60000); // Staf TechnicalManager = Manajer Baru ("13", "Presiden Chen", "Manajer Departemen Teknis", 60000); / *** Ada juga asisten dan beberapa pengawas di departemen teknis*/ // staf Deptassistant = Manajer Baru ("1301", "Asisten Wang", "Departemen Asisten", 20000); // Departemen Teknis Manajer1 DeptManager1 = Manajer Baru ("1302", "Supervisor1", "Supervisor Teknis", 30000); / ** * Pengawas Teknis DeptManager1 Ada insinyur perangkat lunak (orang yang bekerja pada akhirnya) */ staf SoftwareEngineer1 = Karyawan Baru ("1302001", "Zhang San", "Insinyur Perangkat Lunak", 5000); Staff perangkat lunakEngineer2 = karyawan baru ("1302002", "Li Si", "Software Engineer", 5500); Staff SoftwareEngineer3 = karyawan baru ("1302003", "Wang Wu", "Software Engineer", 4500); // Tambahkan informasi karyawan untuk Direktur Teknis 1 DeptManager1.add (SoftwareEngineer1); DeptManager1.Add (SoftwareEngineer2); DeptManager1.Add (SoftwareEngineer3); // Direktur Departemen Teknis 2 DeptManager2 = Manajer Baru ("1303", "Supervisor2", "Direktur Teknis", 30000); // Tambahkan ke Manajer Departemen Teknis: Asisten Departemen, Direktur Teknis 1 dan Direktur Teknis 2 TechnicalManager.Add (Deptassistant); TechnicalManager.Add (DeptManager1); TechnicalManager.Add (DeptManager2); // Manajer Pemasaran Staf MarketingManager = Manajer Baru ("14", "Mr. Wu", "Manajer Pasar", 60000); // Tambahkan ke CEO: Manajer Departemen Keuangan, Manajer Departemen Sumber Daya Manusia, Manajer Departemen Teknis dan Manajer Pemasaran Boss.Add (Financeemanager); boss.add (personelManager); boss.add (TechnicalManager); Boss.Add (MarketingManager); // cetak informasi CEO bos.printuserbaseInfo (); // Cetak CEO Informasi Karyawan Boss.PrintemployeesInfo (1); }}Hasil operasi adalah sebagai berikut:
| 1 CEO BOSS BESAR 100000.0
--- | 11 Manajer Departemen Keuangan Jenderal Zhang 60000.0
--- | 12 Manajer Departemen Sumber Daya Manusia Jenderal Wang 60000.0
--- | 13 General Chen Technical Department Manager 60000.0
------ | 1301 Asisten Asisten Departemen Wang 20000.0
----- | 1302 Supervisor 1 Pengawas Teknis 30000.0
------- | 1302001 Zhang San Software Engineer 5000.0
------- | 1302002 Li SI Software Engineer 5500.0
------- | 1302003 Wang Wu Software Engineer 4500.0
------ | 1303 Supervisor 2 Supervisor Teknis 30000.0
--- | 14 General Manager Wu Marketing Department 60000.0
3. Prinsip -prinsip desain model ini
1 Perlakukan objek individu dan gabungan secara seragam
2 pemrograman berorientasi abstrak
4. Gunakan kesempatan
1 Ketika Anda ingin mewakili hierarki "parsial dan utuh" dari objek.
2 Ketika pengguna ingin mengabaikan perbedaan antara objek gabungan dan satu objek, pengguna akan menggunakan semua objek dalam struktur gabungan secara seragam.
Diagram kelas statis dari mode kombinasi adalah sebagai berikut
Untuk informasi lebih lanjut tentang algoritma java, pembaca yang tertarik dengan situs ini dapat melihat topik: "struktur data java dan tutorial algoritma", "ringkasan tips node dom java", "ringkasan file operasi java dan direktori" dan "ringkasan tip operasi java cache" tips java "tips java" Tips "Java Cache Tips"
Saya harap artikel ini akan membantu pemrograman Java semua orang.