Apa perbedaan antara Fasad dan Pola Adaptor?


Jawaban:


142

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.


4
Analogi yang bagus menggunakan remote control. Penjelasan pola adaptor tidak masalah, tetapi akan sangat bagus jika muncul dengan jenis analogi yang sama.
Kevin Le - Khnle

2
Memang analogi yang sangat bagus! Sebuah dunia nyata contoh Java dari pola Adapter dapat membantu memahami lebih baik: InputStreamReaderyang beradaptasi InputStreamuntuk Readerdan OutputStreamWriteryang beradaptasi OutputStreamuntuk WriterKedua yang jenis abstrak yang berbeda.
BalusC


@Knle - ditambahkan dalam analogi Adaptor (berdasarkan pengalaman pribadi). @Eric - terima kasih atas inspirasi dan foto yang bagus! @BalusC - panggilan yang bagus untuk contoh dunia nyata.
awshepard

@BalusC - Saya suka teladan Anda juga. Untung saya tahu Java. @Eric Petroelje - Sebuah gambar bernilai ribuan kata :-) @awshepard - jika saya tidak memprogram, saya sekarang dapat mengikuti penjelasan Anda juga :-)
Kevin Le - Khnle

125

Adaptor == membuat pasak persegi masuk ke dalam lubang bundar.

Fasad == satu panel kontrol untuk menjalankan semua komponen internal.


8
Jawaban itu dibodohi dengan sempurna! Saya memasukkannya ke dalam catatan pola saya. :)
Joshua Dale

1
kebesaran dalam kesederhanaan
seorang pria

20

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.


18

Tatapan:

Poin utama: (dari artikel journaldev oleh Pankaj Kumar)

  1. Pola fasad lebih seperti penolong untuk aplikasi klien
  2. Pola fasad dapat diterapkan di setiap titik pengembangan, biasanya ketika jumlah antarmuka bertambah dan sistem menjadi kompleks .
  3. Antarmuka subsistem tidak mengetahui Fasad dan mereka seharusnya tidak memiliki referensi apa pun dari antarmuka Fasad
  4. Pola fasad harus diterapkan untuk jenis antarmuka yang serupa , tujuannya adalah untuk menyediakan satu antarmuka daripada beberapa antarmuka yang melakukan jenis pekerjaan serupa.

Diagram kelas fasad:

masukkan deskripsi gambar di sini

Adaptor:

  1. Itu adalah pola struktural
  2. Berguna untuk bekerja dengan dua antarmuka yang tidak kompatibel
  3. Itu membuat segalanya bekerja setelah mereka dirancang

Diagram kelas Adaptor:

masukkan deskripsi gambar di sini

Anda dapat menemukan detail lebih lanjut tentang Adaptor di posting SE ini:

Perbedaan antara pola Bridge dan pola Adaptor

Perbedaan utama:

  1. Fasad mendefinisikan antarmuka baru, sedangkan Adaptor menggunakan antarmuka lama . Adaptor membuat dua antarmuka yang ada bekerja bersama sebagai lawan mendefinisikan yang sama sekali baru
  2. Adaptor dan Fasad keduanya merupakan pembungkus; tetapi mereka adalah jenis pembungkus yang berbeda. Maksud dari Fasad adalah untuk menghasilkan antarmuka yang lebih sederhana, dan maksud Adaptor adalah mendesain antarmuka yang sudah ada

Lihat artikel pembuatan sumber juga untuk pemahaman yang lebih baik.


Senang melihat diagram! Hanya beberapa klarifikasi, ketika saya mengubah jumlah / jenis parameter apakah itu berarti itu bukan Adaptor lagi? suka someMethod(int year, int month) didelegasikan someMethod(DateTime start, DateTime end)atau katakanlah someMethod()didelegasikan kesomeMethod(T param)
Jaime Sangcap

Jika kedua metode berada di kelas yang sama, ini disebut overloading. Jika mereka berada di kelas yang berbeda, itu bisa menjadi adpater jika adaptor dan hubungan adaptasi diimplementasikan
Ravindra babu

Penjelasan yang sangat bagus.
Duc Filan

14

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.



8

Fasad biasanya dikontraskan dengan Adaptor.

+--------------------------------------------------------------+-----------------------------------------------+
|                            Facade                            |                    Adapter                    |
+--------------------------------------------------------------+-----------------------------------------------+
| Simplifies multiple complex components with single interface | Provides differnet interface for an interface |
| Works with multiple components                               | Works with single component                   |
| Control panel is an example                                  | A power adapter is an example                 |
| High-level interface                                         | Low-level interface                           |
+--------------------------------------------------------------+-----------------------------------------------+

4

Seperti biasa, terdapat kesamaan antara beberapa pola. Tapi saya akan melihatnya seperti ini:

  • Fasad digunakan untuk merangkum seluruh lapisan, dan menawarkan beberapa metode untuk mengaksesnya "dengan mudah"
  • Adaptor digunakan, di mana Anda memiliki dua komponen yang seharusnya sudah bekerja bersama, tetapi tidak, hanya karena beberapa perbedaan "tidak penting" di antarmuka.

1
Penjelasan yang bagus. Ini pertama kalinya saya menemukan kata "perbedaan yang tidak penting" saat menjelaskan adaptor, yang sebenarnya benar
Sudara

4

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 Carkelas di domain Anda dan Anda bekerja dengan penyedia mobil eksternal yang juga menetapkan kelas Mobil. Di kelas ini, Anda memiliki fungsi car.getDoors()tetapi penyedia eksternal memiliki yang setara car.getNumDoors(). Anda tidak ingin mengubah cara Anda memanggil fungsi ini, jadi Anda bisa menggunakan kelas adaptor untuk menggabungkan kelas Car eksternal sehingga panggilan ke getDoors()adaptor didelegasikan ke getNumDoors()kelas eksternal.


3

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.


3

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.


1

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 deviceke a serial port, Anda memerlukan file USB-serial port adapter.


1

Pola adaptor menghubungkan dua antarmuka yang tidak kompatibel dengan menyediakan antarmuka baru.

Pola fasad menyederhanakan subsistem yang kompleks (memiliki banyak komponen) dengan satu antarmuka.


1

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".


0

Saya telah membaca kedua definisi tersebut dan keduanya tampaknya sama.

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".


0

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.