Mod gabungan
Corak Komposit, juga dipanggil corak sebahagian keseluruhan, digunakan untuk merawat sekumpulan objek yang serupa sebagai objek tunggal. Mod gubahan menggabungkan objek mengikut struktur pokok, yang digunakan untuk mewakili sebahagian dan keseluruhan hierarki. Corak reka bentuk jenis ini ialah corak struktur, yang mencipta struktur pokok kumpulan objek.
Corak ini mencipta kelas yang mengandungi set objeknya sendiri. Kelas ini menyediakan cara untuk mengubah suai kumpulan objek yang sama.
Kami menggunakan contoh berikut untuk menunjukkan penggunaan mod gabungan. Contoh tersebut menggambarkan hierarki pekerja dalam sesebuah organisasi.
Pengenalan
Niat: Gabungkan objek ke dalam struktur pokok untuk mewakili hierarki "sebahagian keseluruhan". Corak gubahan membolehkan pengguna menggunakan objek tunggal dan objek komposit secara konsisten.
Penyelesaian utama: Ia mengaburkan konsep elemen ringkas dan elemen kompleks dalam masalah struktur pokok kami dipisahkan daripada struktur dalaman unsur kompleks.
Bila menggunakan: 1 Anda mahu mewakili hierarki sebahagian keseluruhan (struktur pokok) objek. 2. Anda mahu pengguna mengabaikan perbezaan antara objek gabungan dan objek tunggal, dan pengguna akan menggunakan semua objek dalam struktur gabungan secara seragam.
Cara menyelesaikan: Cawangan dan daun melaksanakan antara muka bersatu, dan antara muka digabungkan di dalam cawangan.
Kod kunci: Cawangan menggabungkan antara muka ini secara dalaman dan mengandungi Senarai atribut dalaman, yang mengandungi Komponen.
Contoh aplikasi: 1 Ungkapan aritmetik termasuk operan, operator dan operan lain, di mana pengendali lain juga boleh menjadi pepohon operasi, operator dan nombor operasi lain. 2. Dalam JAVA AWT dan SWING, Button dan Checkbox ialah daun, dan Container ialah cawangan.
Kelebihan: 1. Panggilan modul peringkat tinggi adalah mudah. 2. Nod boleh ditambah secara bebas.
Kelemahan: Apabila menggunakan corak gabungan, pengisytiharan daun dan cawangan ialah kelas pelaksanaan, bukan antara muka, yang melanggar prinsip penyongsangan kebergantungan.
Senario penggunaan: Senario separa dan keseluruhan, seperti menu pokok, pengurusan fail dan folder.
Nota: ditakrifkan sebagai kelas konkrit.
Pelaksanaan
Kami mempunyai kelas Pekerja yang dianggap sebagai kelas model komposit. CompositePatternDemo, kelas demo kami menggunakan kelas Pekerja untuk menambah hierarki jabatan dan mencetak semua pekerja.
Langkah 1
Buat kelas Pekerja dengan senarai objek Pekerja.
Employee.java
import java.util.ArrayList; import java.util.List; public class Employee { private String name; private String dept; private int salary; private List<Employee> subordinates; //构造函数 public Employee(String name,String dept, int sal) { this.name = name; this.dept = dept; this.salary = sal; subordinates = new ArrayList<Employee>(); } public void add(Employee e) { subordinates.add(e); } public void remove(Employee e) { subordinates.remove(e); } public List<Employee> getSubordinates(){ return subordinates; } public String toString(){ return ("Employee :[ Name : "+ name +", dept : "+ dept + ", salary :" + salary+" ]"); } }
Langkah 2
Gunakan kelas Pekerja untuk mencipta dan mencetak hierarki pekerja.
CompositePatternDemo.java
public class CompositePatternDemo { public static void main(String[] args) { Employee CEO = new Employee("John","CEO", 30000); Employee headSales = new Employee("Robert","Head Sales", 20000); Employee headMarketing = new Employee("Michel","Head Marketing", 20000); Employee clerk1 = new Employee("Laura","Marketing", 10000); Employee clerk2 = new Employee("Bob","Marketing", 10000); Employee salesExecutive1 = new Employee("Richard","Sales", 10000); Employee salesExecutive2 = new Employee("Rob","Sales", 10000); CEO.add(headSales); CEO.add(headMarketing); headSales.add(salesExecutive1); headSales.add(salesExecutive2); headMarketing.add(clerk1); headMarketing.add(clerk2); //打印该组织的所有员工 System.out.println(CEO); for (Employee headEmployee : CEO.getSubordinates()) { System.out.println(headEmployee); for (Employee employee : headEmployee.getSubordinates()) { System.out.println(employee); } } } }
Langkah 3
Sahkan output.
rreeee