CodeGym/Java Course/Modul 3/Pola struktural

Pola struktural

Level 16, Pelajaran 1
Tersedia

2.1 Adaptor

Adaptor (Adapter) adalah pola desain struktural yang dirancang untuk mengatur penggunaan fungsi objek yang tidak tersedia untuk dimodifikasi melalui antarmuka yang dibuat khusus.

Definisi resminya agak rumit, tetapi jika Anda mendeskripsikannya dengan kata-kata Anda sendiri, adaptor adalah pola desain yang memungkinkan objek dengan antarmuka yang tidak kompatibel untuk bekerja bersama .

pola adaptor

Digunakan untuk mengatur penggunaan fungsi objek yang tidak dapat dimodifikasi melalui antarmuka yang dibuat khusus. Kelas tambahan dibuat yang memiliki antarmuka yang diperlukan, dan kelas ini pada gilirannya memanggil metode objek yang diinginkan (yang tidak memiliki antarmuka yang diperlukan).

Penting! Jika dalam kode Anda menemukan Adaptor sufiks untuk suatu kelas, maka Anda berhak untuk mempertimbangkan bahwa kelas ini bertindak sebagai adaptor dan dikaitkan dengan sekelompok kelas yang bekerja sesuai dengan skema yang dijelaskan di atas.

Ini digunakan dalam kasus di mana sistem mendukung data dan perilaku yang diperlukan, tetapi memiliki antarmuka yang tidak sesuai. Penggunaan paling umum dari pola Adaptor adalah saat Anda ingin membuat kelas yang mewarisi dari kelas abstrak baru atau yang sudah ada.

Kekuatan:

  • Transisi untuk menggunakan kelas eksternal lain tidak memerlukan pengerjaan ulang sistem itu sendiri, cukup dengan mengimplementasikan satu kelas Adaptor lagi.
  • Kemandirian dari penerapan kelas eksternal (kelas dari perpustakaan yang kodenya tidak dapat kita ubah). Program Anda menjadi independen dari antarmuka kelas eksternal.

2.2 Dekorator

Dekorator adalah pola desain struktural untuk secara dinamis melampirkan perilaku tambahan ke suatu objek. Pola Dekorator memberikan alternatif yang baik dan fleksibel untuk praktik subklas untuk memperluas fungsionalitas.

Pola dekorator

Digunakan untuk menghubungkan kewajiban tambahan secara dinamis ke suatu objek.

Banyak dari Anda akan bertanya: bagaimana Anda secara dinamis (saat program sedang berjalan) menambahkan perilaku baru ke objek? Suatu objek dapat dirangkai dari potongan-potongan, yaitu benda-benda kecil. Ingat rantai filter di servlet? Atau Stream API saat Anda menulis kueri menggunakan filter(), map(), list()?

IntStream.of(50, 60, 70, 80, 90).filter(x -> x < 90).map(x -> x + 10).limit(3).forEach(System.out::print);

Kekuatan pola Dekorator:

  • Tidak perlu membuat subclass untuk memperluas fungsionalitas objek.
  • Kemampuan untuk menghubungkan fungsionalitas baru secara dinamis di mana saja: sebelum atau sesudah fungsionalitas utama objek ConcreteComponent.

2.3 Proksi

Proxy adalah pola desain struktural yang menyediakan objek yang mengontrol akses ke objek lain, mencegat dan meneruskan semua panggilannya.

Wakil (Kuasa)

Pola Proxy menyediakan objek pengganti sebagai pengganti objek sebenarnya. Objek ini mengontrol akses ke objek aslinya. Sangat sering digunakan.

Ingat bagaimana kita menggunakan kerangka kerja Mockito dan mencegat panggilan ke objek nyata menggunakan metode Mockito.spy() atau anotasi @Spy? Saat itulah objek Proksi khusus dibuat, yang melaluinya semua panggilan ke objek asli diteruskan.

Dan kemudian kita bisa mengelola panggilan ini dengan menambahkan aturan ke objek. Benar - objek aslinya tidak berubah, dan bekerja dengannya menjadi jauh lebih fleksibel. Ini sangat berguna ketika kita tidak memanggil objek proxy dari kode kita, tetapi meneruskannya ke suatu tempat. Dengan demikian mengendalikan komunikasi dua objek yang independen dari kita.

Jenis proxy berdasarkan tujuan:

  • Logging proxy : mencatat semua panggilan ke "Subjek" dengan parameternya.
  • Proksi jarak jauh (proksi jarak jauh): menyediakan komunikasi dengan "Subjek", yang berada di ruang alamat yang berbeda atau di mesin jarak jauh. Mungkin juga bertanggung jawab untuk menyandikan permintaan dan argumennya dan mengirimkan permintaan yang disandikan ke "Subjek" yang sebenarnya.
  • Proksi virtual (proksi virtual): memastikan bahwa "Subjek" yang sebenarnya dibuat hanya jika benar-benar dibutuhkan. Itu juga dapat menyimpan beberapa informasi tentang "Subjek" yang sebenarnya untuk menunda pembuatannya.
  • Copy-on-write : Memberikan salinan "subjek" saat klien melakukan tindakan tertentu (kasus khusus "proksi virtual").
  • Proksi perlindungan : Dapat memeriksa apakah penelepon memiliki izin yang diperlukan untuk mengajukan permintaan.
  • Caching Proxy : Menyediakan penyimpanan sementara hasil perhitungan sebelum menyajikannya ke beberapa klien yang dapat membagikan hasilnya.
  • Screening Proxy: Melindungi "Subjek" dari klien berbahaya (atau sebaliknya).
  • Sinkronisasi Proxy : melakukan kontrol akses tersinkronisasi ke "Subjek" di lingkungan multi-utas asinkron.
  • Tautan "Pintar" (proksi referensi cerdas): melakukan tindakan tambahan saat tautan ke "Subjek" dibuat, misalnya, menghitung jumlah tautan aktif ke "Subjek".

2.4 Jembatan

Pola Bridge adalah pola desain struktural yang digunakan untuk "memisahkan abstraksi dan implementasi sehingga dapat berubah secara independen."

Pola jembatan menggunakan enkapsulasi, agregasi, dan dapat menggunakan pewarisan untuk berbagi tanggung jawab antar kelas.

Menjembatani

Ketika abstraksi dan implementasi dipisahkan, mereka dapat berubah secara independen. Dengan kata lain, ketika diimplementasikan melalui pola jembatan, perubahan struktur antarmuka tidak mengganggu perubahan struktur implementasi.

Pertimbangkan abstraksi seperti itu sebagai gambar. Ada banyak jenis bentuk, masing-masing dengan sifat dan metodenya sendiri. Namun, ada sesuatu yang menyatukan semua angka tersebut. Misalnya, setiap bentuk harus bisa menggambar sendiri, menskalakan, dan sebagainya.

Pada saat yang sama, menggambar grafik mungkin berbeda tergantung pada jenis OS atau pustaka grafik. Bentuk harus dapat menggambar dirinya sendiri di berbagai lingkungan grafis. Namun tidak praktis untuk menerapkan semua metode menggambar di setiap bentuk, atau memodifikasi bentuk setiap kali metode menggambar berubah.

Dalam hal ini, pola jembatan membantu, memungkinkan Anda membuat kelas baru yang akan mengimplementasikan gambar di berbagai lingkungan grafis. Dengan menggunakan pendekatan ini, sangat mudah untuk menambahkan bentuk dan cara baru untuk menggambarnya.

Koneksi yang ditunjukkan oleh panah pada diagram dapat memiliki 2 arti: a) "sejenis", sesuai dengan prinsip substitusi Liskov, dan b) salah satu kemungkinan penerapan abstraksi. Bahasa biasanya menggunakan pewarisan untuk mengimplementasikan a) dan b), yang cenderung membengkakkan hierarki kelas.

Jembatan berfungsi tepat untuk menyelesaikan masalah ini: objek dibuat berpasangan dari objek kelas hierarki A dan hierarki B, pewarisan dalam hierarki A memiliki arti "variasi" menurut Liskov, dan untuk konsep "implementasi abstraksi” tautan dari objek A ke objek berpasangan B digunakan.

2.5 Fasad

Pola Fasad adalah pola desain struktural yang menyembunyikan kompleksitas sistem dengan mengurangi semua kemungkinan panggilan eksternal ke satu objek yang mendelegasikannya ke objek yang sesuai dalam sistem.

Templat Fasad

Bagaimana cara menyediakan antarmuka terpadu dengan serangkaian implementasi atau antarmuka yang berbeda, misalnya, ke subsistem, jika penggabungan yang kuat ke subsistem itu tidak diinginkan, atau implementasi subsistem mungkin berubah?

Tentukan satu titik interaksi dengan subsistem - objek fasad yang menyediakan antarmuka umum dengan subsistem, dan berikan tanggung jawab untuk berinteraksi dengan komponennya. Fasad adalah objek eksternal yang menyediakan titik masuk tunggal untuk layanan subsistem.

Implementasi komponen subsistem lainnya bersifat privat dan tidak terlihat oleh komponen eksternal. Objek fasad menyediakan implementasi pola GRASP Tahan terhadap perubahan dalam hal perlindungan terhadap perubahan implementasi subsistem.

Penting! Pola ini digunakan saat kita ingin menyembunyikan beberapa grup objek sepenuhnya dan meneruskan semua komunikasi dengan mereka melalui objek kita. Jika Anda hanya ingin memberikan kontrol atas proses komunikasi objek dan tidak serta merta menyembunyikannya, maka lebih baik menggunakan pola Proxy.

1
Tugas
Modul 3,  level 16pelajaran 1
Terkunci
Through the Nail with a Microscope
task4101
1
Tugas
Modul 3,  level 16pelajaran 1
Terkunci
Signature Recipe
task4102
1
Tugas
Modul 3,  level 16pelajaran 1
Terkunci
Surprise, Anonymous!
task4103
1
Tugas
Modul 3,  level 16pelajaran 1
Terkunci
Fantastic Creatures
task4104
1
Tugas
Modul 3,  level 16pelajaran 1
Terkunci
Alchemy Library
task4105
Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar