"Helo, Amigo! Hari ini saya akan memberitahu anda apa sebenarnya « penyesuai » itu. Saya harap selepas mempelajari topik ini anda akan mendapat pemahaman yang lebih baik tentang aliran input/output."
Bayangkan program anda menggunakan dua rangka kerja yang ditulis oleh pengaturcara/syarikat lain. Kedua-dua rangka kerja adalah sangat baik dan menggunakan prinsip OOP: abstraksi, polimorfisme, enkapsulasi. Bersama-sama, mereka hampir merangkumi sepenuhnya perkara yang perlu dilakukan oleh program anda. Anda tinggal dengan tugas yang mudah. Anda perlu menghantar objek yang dibuat oleh satu rangka kerja ke rangka kerja yang lain. Tetapi kedua-dua rangka kerja adalah berbeza sama sekali dan "tidak tahu tentang satu sama lain", iaitu mereka tidak mempunyai sebarang kelas yang sama. Anda perlu menukar objek satu rangka kerja menjadi objek yang lain.
Tugas ini boleh diselesaikan dengan indah dengan menggunakan teknik « penyesuai » (corak reka bentuk):
kod Java | Penerangan |
---|---|
|
Ini mencerminkan corak reka bentuk penyesuai.
Idea asas ialah kelas MyClass menukar (menyesuaikan) satu antara muka kepada yang lain. |
"Bolehkah anda memberi saya contoh yang lebih spesifik?"
"OK. Katakan setiap rangka kerja mempunyai antara muka "senarai" uniknya sendiri. Ia mungkin kelihatan seperti ini:"
kod Java | Penerangan |
---|---|
|
Kod daripada rangka kerja pertama ( Alpha ) .
AlphaList ialah salah satu antara muka yang membenarkan kod rangka kerja berinteraksi dengan kod yang menggunakan rangka kerja. |
|
Pengurus AlphaList AlphaListManager ialah kelas dalam rangka kerja. Kaedah createListnya menciptaobjek AlphaList |
|
Kod daripada rangka kerja kedua ( Beta ).
BetaList ialah salah satu antara muka yang membenarkan kod rangka kerja berinteraksi dengan kod yang menggunakan rangka kerja. BetaSaveManager ialah kelas dalam rangka kerja. Kaedah saveListnyamenyimpanobjek BetaList |
|
Kelas «Penyesuai» yang menukar daripada antara muka AlphaList kepada antara muka BetaList
Kelas ListAdapter melaksanakan antara muka BetaList daripada rangka kerja kedua. Apabila seseorang memanggil kaedah ini, kod kelas «ke hadapan» panggilan ke pembolehubah senarai , yang merupakan AlphaList daripada rangka kerja pertama. Objek AlphaList dihantar kepada pembina ListAdapter Kaedah setSize beroperasi mengikut peraturan berikut: jika saiz senarai mesti ditambah, tambah item kosong (null). Jika saiz senarai perlu dikecilkan, padamkan item pada penghujungnya. |
|
Contoh bagaimana ia boleh digunakan |
"Saya paling suka contoh terakhir anda. Sangat ringkas dan boleh difahami."
GO TO FULL VERSION