Corak Reka Bentuk Komposit di Jawa

1. Pengenalan

Dalam tutorial ringkas ini, kami akan memperkenalkan corak reka bentuk komposit di Java.

Kami akan menerangkan struktur dan tujuan penggunaannya.

2. Strukturnya

Corak komposit dimaksudkan untuk memungkinkan merawat objek individu dan komposisi objek, atau "komposit" dengan cara yang sama.

Ia dapat dilihat sebagai struktur pohon yang terdiri dari jenis yang mewarisi jenis dasar, dan dapat mewakili satu bagian atau keseluruhan hierarki objek.

Kita boleh membahagikan coraknya menjadi:

  • komponen - adalah antara muka asas untuk semua objek dalam komposisi. Ini mestilah antara muka atau kelas abstrak dengan kaedah biasa untuk mengurus komposit kanak-kanak.
  • daun - melaksanakan tingkah laku lalai komponen asas. Ia tidak mengandungi rujukan ke objek lain.
  • komposit - mempunyai unsur daun. Ia melaksanakan kaedah komponen asas dan menentukan operasi yang berkaitan dengan anak.
  • klien - mempunyai akses ke elemen komposisi dengan menggunakan objek komponen asas.

3. Contoh Praktikal

Sekarang, mari kita selami pelaksanaannya. Anggaplah kita mahu membina struktur jabatan yang hierarki dalam sebuah syarikat.

3.1. Komponen Asas

Sebagai objek komponen, kami akan menentukan antara muka Jabatan yang mudah :

public interface Department { void printDepartmentName(); }

3.2. Daun

Untuk komponen daun, mari kita tentukan kelas untuk jabatan kewangan dan penjualan:

public class FinancialDepartment implements Department { private Integer id; private String name; public void printDepartmentName() { System.out.println(getClass().getSimpleName()); } // standard constructor, getters, setters }

Kelas daun kedua, SalesDepartment, serupa:

public class SalesDepartment implements Department { private Integer id; private String name; public void printDepartmentName() { System.out.println(getClass().getSimpleName()); } // standard constructor, getters, setters }

Kedua-dua kelas melaksanakan kaedah printDepartmentName () dari komponen asas, di mana mereka mencetak nama kelas untuk masing-masing.

Juga, kerana mereka kelas daun, mereka tidak mengandungi objek Jabatan lain .

Seterusnya, mari kita lihat kelas komposit juga.

3.3. Unsur Komposit

Sebagai kelas komposit, mari buat kelas HeadDepartment :

public class HeadDepartment implements Department { private Integer id; private String name; private List childDepartments; public HeadDepartment(Integer id, String name) { this.id = id; this.name = name; this.childDepartments = new ArrayList(); } public void printDepartmentName() { childDepartments.forEach(Department::printDepartmentName); } public void addDepartment(Department department) { childDepartments.add(department); } public void removeDepartment(Department department) { childDepartments.remove(department); } }

Ini adalah kelas komposit kerana mengandungi koleksi komponen Jabatan , serta kaedah untuk menambah dan membuang unsur dari senarai.

Kaedah komposit printDepartmentName () dilaksanakan dengan mengulangi senarai elemen daun dan menggunakan kaedah yang sesuai untuk masing-masing.

4. Ujian

Untuk tujuan ujian, mari kita lihat kelas CompositeDemo :

public class CompositeDemo { public static void main(String args[]) { Department salesDepartment = new SalesDepartment( 1, "Sales department"); Department financialDepartment = new FinancialDepartment( 2, "Financial department"); HeadDepartment headDepartment = new HeadDepartment( 3, "Head department"); headDepartment.addDepartment(salesDepartment); headDepartment.addDepartment(financialDepartment); headDepartment.printDepartmentName(); } }

Pertama, kami membuat dua contoh untuk bahagian kewangan dan penjualan. Setelah itu, kami membuat instansi ketua jabatan dan menambahkan contoh yang dibuat sebelumnya.

Akhirnya, kita dapat menguji kaedah komposisi printDepartmentName () . Seperti yang kita jangkakan, output mengandungi nama kelas setiap komponen daun :

SalesDepartment FinancialDepartment

5. Kesimpulan

Dalam artikel ini, kami mengetahui mengenai corak reka bentuk Komposit. Penulisan ini menyoroti struktur utama dan menunjukkan penggunaannya melalui contoh praktikal.

Seperti biasa, kod lengkap terdapat dalam projek Github.