Perbedaan antara pola Adaptor dan pola Proxy?

33

Sejauh yang dipahami, pola adaptor menciptakan objek pembungkus untuk objek nyata kita yang menarik, hanya satu tingkat tipuan lagi, yang memberikan fleksibilitas. fleksibilitasnya adalah, jika antarmuka objek nyata diubah, maka kami mengubah antarmuka pembungkus yang menunjuk ke objek nyata, sehingga antarmuka sisi klien tidak berubah.

The Pola Proxy adalah sama, dengan perbedaan bahwa setiap wrapper proxy yang hanya menyediakan subset koheren fungsi objek nyata. Mengapa ini berguna, ketika kita berusaha untuk membuat "satu kelas untuk satu tujuan" berada di luar jangkauanku.

Sudahkah saya mendapatkan ini dengan benar?

Vorac
sumber

Jawaban:

55

Tidak semuanya.

Tujuan utama dari pola adaptor adalah untuk mengubah antarmuka kelas / pustaka A ke harapan klien B. Implementasi yang khas adalah kelas pembungkus atau sekumpulan kelas. Tujuannya bukan untuk memfasilitasi perubahan antarmuka di masa depan, tetapi antarmuka saat ini tidak kompatibel.

The Pola Proxy juga menggunakan kelas wrapper, tetapi untuk tujuan yang berbeda. Tujuan dari pola proxy adalah untuk membuat stand-in untuk sumber daya nyata. Alasan untuk menggunakan proxy bisa jadi

  • Sumber daya nyata berada di komputer jarak jauh (proxy memfasilitasi interaksi dengan sumber daya jarak jauh)
  • Sumber daya sesungguhnya mahal untuk dibuat (proksi memastikan biaya tidak dikeluarkan kecuali / sampai benar-benar diperlukan)

Yang paling penting adalah bahwa proxy menyediakan pengganti drop-in untuk sumber daya nyata itu adalah stand-in untuk, sehingga harus menyediakan antarmuka yang sama.

Bart van Ingen Schenau
sumber
Pertama-tama, terima kasih atas jawaban yang bagus. Apakah proxy menerapkan semua antarmuka yang dibutuhkan klien saat ini, atau apakah proxy mengimplementasikan semua antarmuka yang disediakan sumber daya yang sebenarnya?
Vorac
1
@Vacac: Itu tergantung pada kompleksitas antarmuka dan filosofi desain Anda. Keduanya mungkin, tetapi jika antarmuka besar / kompleks atau Anda sangat percaya pada YAGNI, maka lebih masuk akal untuk mengimplementasikan hanya apa yang Anda butuhkan.
Bart van Ingen Schenau
Jadi, mengingat bahwa pola Adapter menggunakan kelas wrapper, apakah pola Adapter pola proxy?
moonman239
@ moonman239: Tidak, karena niat untuk menggunakan kelas pembungkus berbeda. Hanya karena dua pola terlihat serupa dalam diagram kelas tidak berarti mereka saling terkait atau mengimplementasikan satu sama lain. Faktor utama agar pola menjadi berbeda adalah niat mereka.
Bart van Ingen Schenau