Saya telah membaca kedua definisi tersebut dan keduanya tampaknya sama. Adakah yang bisa menunjukkan apa perbedaan mereka?
Terima kasih
sumber
Saya telah membaca kedua definisi tersebut dan keduanya tampaknya sama. Adakah yang bisa menunjukkan apa perbedaan mereka?
Terima kasih
The Facade Pola halaman wiki memiliki catatan singkat tentang hal ini.
"Adaptor digunakan ketika pembungkus harus menghormati antarmuka tertentu dan harus mendukung perilaku polimorfik. Di sisi lain, fasad digunakan ketika seseorang menginginkan antarmuka yang lebih mudah atau lebih sederhana untuk digunakan."
Saya mendengar sebuah analogi bahwa Anda harus memikirkan remote control universal Anda yang telah Anda siapkan untuk bekerja dengan semua sistem stereo Anda yang berbeda - Anda menekan "on" dan itu akan menyalakan kotak kabel Anda, penerima Anda, dan TV Anda. Mungkin ini adalah home theater yang sangat mewah dan meredupkan lampu dan juga menarik bayangannya. Itu adalah Fasad - satu tombol / fungsi yang menangani serangkaian langkah yang lebih rumit.
Pola Adaptor hanya menghubungkan dua antarmuka yang tidak kompatibel.
EDIT: Analogi cepat untuk pola Adaptor (berdasarkan komentar) mungkin seperti adaptor DVI-ke-VGA. Kartu video modern sering kali berupa DVI, tetapi Anda memiliki monitor VGA lama. Dengan adaptor yang dicolokkan ke input DVI yang diharapkan dari kartu video Anda, dan memiliki input VGA-nya sendiri, Anda akan dapat membuat monitor lama Anda bekerja dengan kartu video baru Anda.
InputStreamReader
yang beradaptasiInputStream
untukReader
danOutputStreamWriter
yang beradaptasiOutputStream
untukWriter
Kedua yang jenis abstrak yang berbeda.Adaptor == membuat pasak persegi masuk ke dalam lubang bundar.
Fasad == satu panel kontrol untuk menjalankan semua komponen internal.
sumber
Sejujurnya, banyak pola dapat diimplementasikan dengan cara yang sama secara terprogram - perbedaannya terletak pada maksudnya.
Pola desain Adaptor dimaksudkan untuk 'menerjemahkan' antarmuka dari satu atau beberapa kelas menjadi antarmuka yang diharapkan klien untuk digunakan - adaptor akan menerjemahkan panggilan ke antarmuka yang diharapkan ke dalam antarmuka sebenarnya yang digunakan kelas yang dibungkus.
Pola fasad digunakan ketika antarmuka yang lebih sederhana diinginkan (dan sekali lagi, dapat diimplementasikan dengan cara yang sama dengan membungkus kelas yang menyinggung.) Anda tidak akan mengatakan Anda menggunakan fasad ketika antarmuka yang ada tidak kompatibel, hanya ketika Anda membutuhkannya. untuk membuatnya lebih mudah dibaca, tidak didesain dengan buruk, dll.
sumber
Tatapan:
Poin utama: (dari artikel journaldev oleh Pankaj Kumar)
Diagram kelas fasad:
Adaptor:
Diagram kelas Adaptor:
Anda dapat menemukan detail lebih lanjut tentang Adaptor di posting SE ini:
Perbedaan antara pola Bridge dan pola Adaptor
Perbedaan utama:
Lihat artikel pembuatan sumber juga untuk pemahaman yang lebih baik.
sumber
someMethod(int year, int month)
didelegasikansomeMethod(DateTime start, DateTime end)
atau katakanlahsomeMethod()
didelegasikan kesomeMethod(T param)
Fasad dirancang untuk mengatur beberapa layanan di belakang satu gateway layanan. Adaptor dirancang untuk menyediakan cara menggunakan antarmuka yang dikenal untuk mengakses antarmuka yang tidak dikenal.
sumber
Tujuan dari a
fasad adalah kesederhanaan
adaptor adalah interoperabilitas .
sumber
sumber
Seperti biasa, terdapat kesamaan antara beberapa pola. Tapi saya akan melihatnya seperti ini:
sumber
Saya akan mencoba menjelaskan ini dengan kata-kata sederhana, tanpa banyak formalitas.
Bayangkan Anda memiliki beberapa kelas domain dan dari UI Anda ingin berinteraksi dengannya. Fasad dapat digunakan untuk menyediakan fungsi yang dapat dipanggil dari lapisan UI sehingga lapisan UI tidak mengetahui tentang kelas domain apa pun selain fasad. Artinya, alih-alih memanggil fungsi di kelas domain, Anda memanggil fungsi tunggal dari fasad, yang akan bertanggung jawab untuk memanggil fungsi yang diperlukan dari kelas lain.
Adaptor, di sisi lain, dapat digunakan untuk mengintegrasikan komponen eksternal lain yang mungkin memiliki fungsionalitas yang sama dengan yang Anda butuhkan tetapi fungsinya tidak dipanggil dengan cara yang persis sama. Misalkan Anda memiliki
Car
kelas di domain Anda dan Anda bekerja dengan penyedia mobil eksternal yang juga menetapkan kelas Mobil. Di kelas ini, Anda memiliki fungsicar.getDoors()
tetapi penyedia eksternal memiliki yang setaracar.getNumDoors()
. Anda tidak ingin mengubah cara Anda memanggil fungsi ini, jadi Anda bisa menggunakan kelas adaptor untuk menggabungkan kelas Car eksternal sehingga panggilan kegetDoors()
adaptor didelegasikan kegetNumDoors()
kelas eksternal.sumber
Pola adaptor memungkinkan dua antarmuka yang sebelumnya tidak kompatibel untuk bekerja satu sama lain. Memiliki 2 antarmuka terpisah dalam permainan.
Pola Facade menggunakan antarmuka yang dikenal, yaitu level rendah / berbutir halus, dan membungkusnya dengan antarmuka berbutir level / jalur yang lebih tinggi. Memiliki satu antarmuka, yang telah disederhanakan dengan saling membungkus.
sumber
Adaptor membuat dua antarmuka bekerja bersama.
Fasad memperlihatkan satu kelas ke tingkat yang lebih tinggi dan lebih terbatas. Misalnya, fasad model tampilan hanya dapat memperlihatkan properti hanya baca tertentu dari kelas tingkat yang lebih rendah.
sumber
Tatapan
Kompleksitas abstrak untuk menyediakan antarmuka yang lebih sederhana. Katakanlah misalnya, OS komputer mengabstraksi kompleksitas perangkat keras yang mendasarinya. Atau bahasa pemrograman tingkat tinggi (Python / JavaScript) mengabstraksi kompleksitas jika dibandingkan dengan bahasa tingkat rendah (C).
Adaptor
Ini analog dengan adaptor perangkat keras. Katakanlah Anda ingin menghubungkan a
USB device
ke aserial port
, Anda memerlukan fileUSB-serial port adapter
.sumber
Pola adaptor menghubungkan dua antarmuka yang tidak kompatibel dengan menyediakan antarmuka baru.
Pola fasad menyederhanakan subsistem yang kompleks (memiliki banyak komponen) dengan satu antarmuka.
sumber
Perbedaan antara kedua pola ini jelas, tetapi tidak dalam bidang Pola Desain, tetapi Pemodelan Domain. Berikut ini, saya akan menjelaskan alasannya.
Pertama, saya ingin mengulangi kata-kata orang lain di sini, dan kemudian saya akan menambahkan catatan:
Fasad adalah antarmuka ke subsistem (sistem eksternal atau warisan) yang menyederhanakan akses untuk klien (kami). Fasad menyembunyikan antarmuka subsistem lain (menggabungkan beberapa panggilan, atau menyembunyikan beberapa API yang tidak kita perlukan), sehingga klien Anda hanya mengakses subsistem itu melalui Fasad ini.
Di sisi lain, Adaptor adalah pembungkus di sekitar layanan atau objek lain. Itu membuat objek yang dibungkus sesuai dengan antarmuka standar yang diharapkan klien. Katakanlah ada metode pada objek "Ledger", yang perlu Anda ubah (ubah parameternya, ubah namanya, dll.). Anda bisa membungkusnya dengan adaptor.
Sekarang, perbedaannya mungkin masih belum jelas. Di situlah saya ingin mengemukakan perbedaan utama antara kedua pola ini sehingga tidak ada ruang untuk kebingungan lebih lanjut :
Fasad tidak mengubah model domain dari subsistem lainnya, sedangkan Adaptor mengubah. Inilah perbedaan utamanya. Titik.
Itulah mengapa Anda menggabungkan keduanya saat Anda membuat Lapisan Anti Korupsi . Katakanlah Anda memiliki subsistem yang ingin Anda gunakan, tetapi Anda tidak ingin model domainnya mencampurkan model domain Anda. Apa yang akan kamu lakukan? Anda akan membuat Lapisan Anti Korupsi. Bagaimana? Anda pertama kali membuat Fasad, yang menyederhanakan mengakses antarmuka untuk subsistem, dan kemudian adaptor untuk objek domain yang digunakan dalam antarmuka itu (ingat fasad masih memegang model domain untuk subsistem lainnya), sehingga sesuai dengan model Anda.
Banyak pola desain dapat digunakan dalam pemodelan domain. Ini juga berlaku untuk pola desain Fasad dan Adaptor. Meskipun perbedaan antara kedua pola ini mungkin tidak terlihat jelas di bidang "pola desain", perbedaannya lebih jelas di bidang "pemodelan domain".
sumber
Betulkah ?
Saya perhatikan bahwa istilah Adaptor terkadang digunakan untuk menggambarkan apa yang sebenarnya adalah Stategy , mungkin karena kata tersebut lebih ekspresif.
Misalnya, di Zend Framework , semua kelas Adapter sebenarnya adalah implementasi dari pola Strategi , karena mereka hanya membungkus kode asli di belakang kelas, untuk memiliki beberapa perilaku.
Adaptor sering digunakan untuk membungkus kode lama atau "gaya lama".
sumber
Tujuan utama pola Fasad adalah membuat kelas atau subsistem lebih mudah digunakan, sedangkan tujuan utama pola Adaptor adalah menyesuaikan antarmuka dengan apa yang diharapkan klien.
sumber