Pola Desain Komposit di Jawa

1. Perkenalan

Dalam tutorial singkat ini, kami akan memperkenalkan pola desain komposit di Java.

Kami akan menjelaskan struktur dan tujuan penggunaannya.

2. Struktur

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

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

Kita dapat memecah polanya menjadi:

  • komponen - adalah antarmuka dasar untuk semua objek dalam komposisi. Ini harus berupa antarmuka atau kelas abstrak dengan metode umum untuk mengelola komposit turunan.
  • leaf - mengimplementasikan perilaku default dari komponen dasar. Itu tidak berisi referensi ke objek lain.
  • komposit - memiliki elemen daun. Ini mengimplementasikan metode komponen dasar dan mendefinisikan operasi yang berhubungan dengan anak.
  • klien - memiliki akses ke elemen komposisi dengan menggunakan objek komponen dasar.

3. Contoh Praktis

Sekarang, mari selami implementasinya. Misalkan kita ingin membangun struktur hierarki departemen di sebuah perusahaan.

3.1. Komponen Dasar

Sebagai objek komponen, kami akan mendefinisikan antarmuka Departemen sederhana :

public interface Department { void printDepartmentName(); }

3.2. daun daun

Untuk komponen daun, mari kita tentukan kelas untuk departemen keuangan 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 kelas mengimplementasikan metode printDepartmentName () dari komponen dasar, tempat mereka mencetak nama kelas untuk masing-masing kelas.

Juga, karena mereka adalah kelas daun, mereka tidak berisi objek Departemen lainnya.

Selanjutnya, mari kita lihat kelas komposit juga.

3.3. Elemen 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 karena menampung kumpulan komponen Departemen , serta metode untuk menambah dan menghapus elemen dari daftar.

Metode gabungan printDepartmentName () diimplementasikan dengan mengulang daftar elemen daun dan menjalankan metode yang sesuai untuk masing-masing.

4. Pengujian

Untuk tujuan pengujian, 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 departemen keuangan dan penjualan. Setelah itu, kami membuat instance departemen kepala dan menambahkan instance yang dibuat sebelumnya ke dalamnya.

Akhirnya, kita bisa menguji metode komposisi printDepartmentName () . Seperti yang kita harapkan, keluarannya berisi nama kelas dari setiap komponen daun :

SalesDepartment FinancialDepartment

5. Kesimpulan

Di artikel ini, kita belajar tentang pola desain komposit. Artikel ini menyoroti struktur utama dan mendemonstrasikan penggunaannya melalui contoh praktis.

Seperti biasa, kode lengkap tersedia di proyek Github.