Apa perbedaan antara pola desain Fasad, Proksi, Adaptor, dan Dekorator?
Saya tidak pernah membaca penjelasan yang jelas, apa milik Anda?
Apa perbedaan antara pola desain Fasad, Proksi, Adaptor, dan Dekorator?
Saya tidak pernah membaca penjelasan yang jelas, apa milik Anda?
Jawaban:
Adaptor mengadaptasi kelas / objek tertentu ke antarmuka baru. Dalam kasus yang pertama, banyak warisan biasanya digunakan. Dalam kasus terakhir, objek dibungkus oleh objek adaptor yang sesuai dan diedarkan. Masalah yang kami pecahkan di sini adalah antarmuka yang tidak kompatibel .
Fasad lebih seperti gerbang sederhana ke serangkaian fungsi yang rumit. Anda membuat kotak hitam untuk klien Anda agar tidak terlalu khawatir, yaitu membuat antarmuka lebih sederhana .
Proxy menyediakan antarmuka yang sama dengan kelas yang di-proxy-kan dan biasanya melakukan beberapa pekerjaan rumah tangga sendiri. (Jadi, alih-alih membuat banyak salinan objek yang berat, X
Anda membuat salinan dari proxy ringan P
yang pada gilirannya mengelola X
dan menerjemahkan panggilan Anda sesuai kebutuhan.) Anda memecahkan masalah klien karena harus mengelola objek yang berat dan / atau kompleks .
Dekorator digunakan untuk menambahkan lebih banyak bubuk mesiu ke objek Anda (perhatikan istilah objek - Anda biasanya menghias objek secara dinamis saat runtime). Anda tidak menyembunyikan / merusak antarmuka objek yang ada, tetapi cukup memperluasnya saat runtime .
Sekarang setelah Anda memiliki dekorator yang terlibat, Anda mungkin ingin tahu mengapa penekanan pada objek kata - beberapa bahasa (seperti Java) tidak mengizinkan pewarisan virtual (yaitu beberapa pewarisan seperti yang dilakukan C ++) untuk memungkinkan Anda melakukannya di waktu kompilasi.
Karena kami telah menyeret beberapa warisan (dan berlian yang ditakuti) Anda akan mencari mixin - yang memerintahkan rangkaian antarmuka linier untuk mengatasi masalah beberapa warisan. Namun, mixin tidak bisa tercampur dengan baik. Dan kami berakhir dengan ciri - ciri - ya gumpalan kecil perilaku tanpa kewarganegaraan yang Anda lihat munculan sepanjang waktu dalam parameter template di C ++. Ciri-ciri mencoba mengatasi masalah komposisi dan dekomposisi perilaku dengan cara yang elegan sementara tidak menggunakan beberapa warisan atau rangkaian yang teratur.
Tatapan
Anda bisa menggunakan fasad, misalnya, untuk membuat panggilan ke API lebih mudah. Lihatlah ini contoh fasad jarak jauh. Idenya di sini adalah bahwa implementasi penuh kode di server disembunyikan dari klien. Klien memanggil 1 metode API yang, pada gilirannya, dapat membuat 1 atau lebih panggilan API di server.
Adaptor
Contoh yang bagus dapat ditemukan di sini , di Wikipedia. Objek klien Source
ingin memanggil metode pada objek lain Target
, tetapi antarmuka objek lain itu berbeda dengan yang diharapkan klien.
Masukkan objek adaptor.
Itu bisa menerima panggilan dari Source
objek dan, di belakang layar, memanggil Target
metode yang harus digunakan.
Source->CallMethodAOnTarget() ---< Adaptor.CallMethodAOnTarget() this calls ---> Target.MethodWithDifferentSignatureAndName(int i)
Sedangkan untuk Proxy, saya tidak memiliki pengalaman tentang pola desain ini.