Mode adaptor
Mendefinisikan pola adaptor (bahasa Inggris: pola adaptor) kadang -kadang disebut gaya pengemasan atau pengemasan. Transfer antarmuka kelas ke apa yang diharapkan pengguna. Suatu adaptasi membuat kelas yang tidak dapat bekerja sama karena ketidakcocokan antarmuka.
Ada dua jenis mode adaptor:
1. Mode Adaptor Objek - Adaptor objek memenuhi antarmuka ekspektasi pengguna melalui asosiasi, dan juga mengurangi kopling yang buruk antar kode. Dianjurkan untuk menggunakan "adaptasi objek" dalam pekerjaan Anda.
2. Mode Adaptor Kelas - Dalam mode adaptor ini, adaptor mewarisi kelas yang diimplementasikan (biasanya beberapa warisan). Tidak ada warisan berganda di Java, jadi saya tidak akan memperkenalkannya di sini.
menyelesaikan
1. Target - Menentukan metode yang perlu digunakan klien.
2. Adaptor - mewarisi atau mengimplementasikan target dan beradaptasi dengan metode adapte untuk ditargetkan.
3. Adaptee - Tentukan metode yang ada.
4. Klien - Metode Panggilan di Target.
kelas publik adaptee {public void spesifik () {System.out.println ("Halo, saya dari adapte!"); }} target antarmuka publik {public void request (); } adaptor kelas publik mengimplementasikan target {adaptee adaptee; adaptor publik () {adaptee = adapte baru (); } public void request () {Adaptee.SpecificRequest (); }} klien kelas publik {public static void main (string [] args) {target target = new adapter (); target.request (); }}Untuk mengimplementasikan pola adaptor kelas, kita membutuhkan adaptor untuk mewarisi adapte.
Skenario yang berlaku
1. Jika Anda ingin menggunakan kelas lama dan antarmuka tidak memenuhi kebutuhan Anda, Anda dapat menggunakan kelas adaptor sebagai kelas mediasi.
2. Anda ingin membuat kelas tujuan umum yang dapat memanggil beberapa antarmuka kelas yang tidak terkait untuk Anda gunakan.
Mode jembatan
Motivasi terkadang abstrak harus memiliki implementasi yang berbeda. Misalnya, ada dua cara untuk menyimpan data, satu adalah metode file dan yang lainnya adalah metode database. Praktik yang biasa adalah mewarisi kelas yang menyimpan data dan kemudian mengimplementasikan berbagai cara untuk menyimpan data. Masalah dengan ini adalah sulit untuk memodifikasi dan memperpanjang metode Simpan, dan metode simpan tidak dapat diaktifkan saat runtime.
Mendefinisikan pola jembatan adalah salah satu pola paling kompleks dalam pola desain perangkat lunak, yang memisahkan bagian -bagian abstrak dari bagian implementasinya sehingga semuanya dapat berubah secara mandiri.
Misalnya, "lingkaran" dan "segitiga" diklasifikasikan di bawah "bentuk" abstrak, sementara "menggambar lingkaran" dan "menggambar segitiga" diklasifikasikan di bawah kategori "menggambar" yang mewujudkan perilaku, dan kemudian "menggambar" disebut oleh "bentuk".
1. Abstrak - Tentukan metode abstrak.
2. AbstractImpl - Gunakan antarmuka implementasi untuk mengimplementasikan metode abstrak.
3. Implementor - mendefinisikan antarmuka untuk perilaku implementasi tertentu.
4. CONCRETEIMPLEMENTOR1, CONCRETEIMPLEMENTOR2 - Implementasikan antarmuka implementasi.
/ ** "Implemor"*/ Antarmuka Drawingapi {public void drawcircle (double x, double y, double radius); }/** "concreteImplementor" 1/2*/class Drawingapi1 mengimplementasikan drawetapi {public void drawcircle (double x, double y, double radius) {System.out.printf ("API1.Circle AT %f: %F Radius %f/n", x, y, radius); }}/** "concreteImplementor" 2/2*/class DrawingApi2 mengimplementasikan drawapi {public void drawcircle (double x, double y, double radius) {System.out.printf ("API2.Circle AT %F: %F Radius %f/n", x, y, radius); }} / ** "abstraksi"* / antarmuka bentuk {public void draw (); // public void low-level REVEIZEBYPERCentage (PCT ganda); // level tinggi}/ ** "abstraksi halus"*/ kelas Circleshape mengimplementasikan bentuk {private double x, y, radius; Drawingapi Private Drawingapi; Public Circleshape (Double X, Double Y, Double Radius, Drawingapi Drawingapi) {this.x = x; this.y = y; this.radius = radius; this.drawingapi = drawingapi; } // implementasi low level IE spesifik public void draw () {drawingapi.drawcircle (x, y, radius); } // tingkat tinggi IE abstrak public void spesifik void resezeBypercentage (double pct) {radius *= pct; }} / ** "klien"* / kelas bridgepattern {public static void main (string [] args) {bentuk [] bentuk = bentuk baru [2]; bentuk [0] = Circleshape baru (1, 2, 3, drawingapi1 baru ()); bentuk [1] = Circleshape baru (5, 7, 11, new drawingapi2 ()); untuk (bentuk bentuk: bentuk) {shape.ressizeBypercentage (2.5); bentuk.draw (); }}} Contoh
1. Simpan data yang disebutkan dalam motivasi.
2. Bingkai gambar grafik. Mirip dengan implementasi dalam kode di atas.
Skenario yang berlaku
1. Anda tidak ingin abstraksi dan implementasi memiliki hubungan yang tetap, tetapi Anda berharap implementasinya dapat dimodifikasi saat runtime.
2. Baik bagian abstrak dan implementasi dapat diperluas secara independen tanpa saling mempengaruhi.