Kita sering menghadapi situasi ini. Dengan dua kelas yang sudah jadi, tidak ada hubungan di antara mereka, tetapi sekarang kami ingin menggunakan salah satu metode kelas dan yang lainnya. Ada solusi untuk memodifikasi antarmuka masing -masing, tetapi inilah yang paling tidak ingin kita lihat. Pada saat ini, mode adaptor akan berguna.
Mode adaptor juga disebut mode adaptor, yang merupakan salah satu dari 23 mode desain yang diusulkan oleh GOF. Mode adaptor adalah salah satu mode konstruktif. Melalui mode adaptor, bentuk antarmuka kelas yang ada (atau kelas eksternal) dapat diubah.
Ada tiga cara untuk mode adaptor, satu adalah adaptor objek, satu adalah adaptor kelas, dan yang lainnya adalah adaptor antarmuka
Contoh -contoh berikut diberikan:
1. Adaptor kelas
Diagram kelas
public class drawrectangle {// Draw square public void drawrectangle (string msg) {System.out.println ("Draw rectangle:" + msg); }} antarmuka publik IDRAWCIRCLE {// Draw Circle Interface void drawcircle (); } /** * The class adapter uses object inheritance, which is a static definition method* @author stone * */ public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {// Can draw square and circle @Override public void drawCircle() { System.out.println("DrawAdapter4Class: drawCircle"); }}2. Adaptor Objek
Diagram kelas:
/*** Adaptor Objek: Cara menggunakan kombinasi objek adalah cara untuk menggabungkan secara dinamis. * Dapat menggambar persegi dan lingkaran * @author stone * Drawadapter adalah adaptor, drawrectangle milik adaptor dan merupakan adaptor. Adaptor akan beradaptasi dengan adaptor dan adaptor (drawcircle) * */ kelas publik DrawAdapter4Object mengimplementasikan IDRAWCIRCLE {// dapat menggambar persegi dan mengelilingi drawrectangle drawrectangle pribadi; Public DrawAdapter4Object (drawrectangle drawrectangle) {this.drawrectangle = drawrectangle; } @Override public void drawcircle () {System.out.println ("DrawAdapter4Object: DrawCircle"); } public void drawrectangle (string msg) {drawrectangle.drawrectangle (msg); }} 3. Adaptor Antarmuka
Diagram kelas
/ * * Adaptor Antarmuka: Ada metode abstrak di antarmuka. Kami hanya ingin menerapkan beberapa dari mereka, tetapi kami tidak ingin menerapkan semuanya. * Jadi berikan implementasi kosong default, dan kemudian mewarisi darinya, dan menulis ulang metode yang ingin kami terapkan */ antarmuka publik idraw {void drawcircle (); void drawrectangle (); } /** Implementasi default dari adaptor antarmuka*/kelas publik DefaultDrawAdapter mengimplementasikan idraw {// implementasi kuadrat dan lingkaran @override public void drawcircle () {} @override public void drawrectangle () {}} tes kelas publik {public static void main (string [] args) {// objek adaptor drawAdapter4Object objAdapter = new DrawAdapter4Object (drawrectangle baru ()); objAdapter.drawcircle (); ObjAdapter.drawrectangle ("Dalam DrawAdapter4Object"); System.out.println ("-------------------"); // Kelas Adaptor DrawAdapter4Class clzAdapter = DrawAdapter4Class baru (); clzadapter.drawcircle (); clzadapter.drawrectangle ("Dalam drawadapter4class"); System.out.println ("---------------------"); // Adaptor antarmuka myDrawAdapter myDrawAdapter = myDrawAdapter baru (); myDrawAdapter.drawcircle (); myDrawAdapter.drawrectangle (); } kelas statis myDrawAdapter memperluas defaultDrawAdapter {@Override public void drawcircle () {System.out.println ("Drawcircle di myDrawAdapter"); }}}Mencetak
DrawAdapter4Object: Drawcircle Draw rectangle: Dalam drawadapter4Object -------------- DrawAdapter4Class: Drawcircle Draw rectangle: Dalam drawadapter4class -------------- Drawcircle di mydrawadapter
Tiga fitur mode adaptor:
1 Objek adaptor mengimplementasikan antarmuka asli
2 Objek adaptor menggabungkan objek yang mengimplementasikan antarmuka baru (objek ini juga tidak dapat mengimplementasikan antarmuka, itu hanya objek sederhana)
3. Metode tertentu di mana panggilan ke metode antarmuka asli adaptor didelegasikan ke instance antarmuka baru
Beberapa orang berpikir bahwa contoh yang menjelaskan pola desain terlalu sederhana, dan tampaknya seperti itu, tetapi jika Anda benar -benar ingin menggunakannya dalam pengembangan proyek, itu benar -benar tidak akan dapat menerapkannya. Faktanya, kami tidak perlu dengan sengaja menggunakan pola desain dalam proyek kami, tetapi harus dimulai dari masalah desain yang sebenarnya dan menggunakan model mana yang dapat menyelesaikan masalah kami. Jangan gunakan pola demi menggunakan pola, lalu lewati saja tanah. Secara umum, selama Anda mengikuti prinsip -prinsip desain tertentu, pola desain juga dirangkum berdasarkan prinsip -prinsip ini. Jika Anda terbiasa dengan prinsip -prinsip ini, polanya secara alami akan ada.