Bekerja dengan pola desain Adaptor

Pola desain adalah solusi untuk masalah dan kompleksitas yang berulang dalam desain perangkat lunak. Pola desain dikategorikan sebagai Kreasi, Struktural, atau Perilaku. Pola penciptaan digunakan untuk membuat dan mengelola mekanisme pembuatan instance kelas. Pola struktural digunakan untuk mewujudkan hubungan antar entitas. Pola desain perilaku berhubungan dengan kolaborasi objek dan pendelegasian tanggung jawab.

Pola Adaptor adalah pola desain struktural yang bertindak sebagai jembatan antara dua antarmuka yang tidak kompatibel. Istilah "Adaptor" digunakan untuk merepresentasikan objek yang memungkinkan dua antarmuka yang tidak kompatibel untuk berkomunikasi dan berkolaborasi. Intinya, pola Adaptor memungkinkan kelas (yang memiliki antarmuka yang tidak kompatibel) untuk bekerja bersama dan objeknya berkomunikasi jika perlu.

Ada jenis adaptor tertentu yang mengimplementasikan antarmuka Target dan Adaptee. Jenis Adaptor seperti itu dikenal sebagai Adaptor Dua Arah. Anda juga memiliki dua jenis adaptor yang berbeda yaitu, Adaptor Kelas dan Adaptor Objek. Sementara yang pertama menggunakan warisan, yang terakhir menggunakan komposisi untuk memperbaiki masalah ketidakcocokan dalam desain Anda. Anda bisa menggunakan pola desain adaptor saat Anda perlu menggunakan pustaka pihak ketiga yang tidak kompatibel dengan tipe yang Anda miliki di aplikasi Anda.

Berikut ini adalah daftar tipe yang berpartisipasi dalam implementasi tipikal pola Adaptor:

  • Target
  • Adaptor
  • Adaptee
  • Klien

Mari kita pahami ini dengan sebuah contoh. Misalkan dua orang yang berbicara dan memahami bahasa yang berbeda perlu berkomunikasi - satu mungkin orang Prancis dan yang lainnya orang Jerman. Jadi, kedua orang ini hanya dapat berbicara dan mengerti bahasa Prancis dan Jerman - tidak keduanya. Anda biasanya membutuhkan seseorang (juru bahasa) yang mengetahui kedua bahasa ini untuk memfasilitasi komunikasi. Jadi, orang yang bisa memfasilitasi komunikasi ini bertindak sebagai adaptor.

Pola ini termasuk dalam kategori struktural karena Anda akan menggunakan pola ini untuk menyusun tipe dalam aplikasi kita - biasanya pola ini dapat mengubah satu antarmuka menjadi antarmuka lainnya. The Gang of Four mendefinisikan pola Adaptor sebagai "Ubah antarmuka kelas menjadi antarmuka lain yang diharapkan klien. Adaptor memungkinkan kelas bekerja sama yang tidak bisa sebaliknya karena antarmuka yang tidak kompatibel."

Mari kita gali beberapa kode sekarang. Pertimbangkan dua kelas berikut.

public class TargetA

            {

                public void DisplayA()

                {

                    Console.WriteLine("TargetA");

                }

            }

            public class TargetB

            {

                public void DisplayB()

                {

                    Console.WriteLine("TargetB");

                }

            }

Seperti yang Anda lihat, kedua kelas tersebut tidak kompatibel - keduanya juga tidak memiliki basis yang sama. Daftar kode berikut menunjukkan bagaimana kelas adaptor terlihat.

public interface ITargetAdapter

            {

                void ProcessData();

            }

public class AdapterA : ITargetAdapter

            {

                 public TargetA targetA { get; set; }

                 public void Process()

                 {

                     targetA.DisplayA();

                 }

                 public AdapterA(TargetA obj)

                 {

                     targetA = obj;

                 }

            }

            public class AdapterB : ITargetAdapter

            {

                 public TargetB targetB { get; set; }

                 public void Process() { targetB.DisplayB(); }

                 public AdapterB(TargetB obj)

                 {

                     targetB = obj;

                 }

            }

Perhatikan bahwa kedua kelas adaptor memiliki satu antarmuka umum bernama ITargetAdapter yang diterapkan oleh kelas ini. Masing-masing dari dua kelas adaptor memiliki konstruktor argumen yang menerima referensi ke objek dari kelas target masing-masing. Antarmuka ITargetAdapter berisi deklarasi metode Process (). Metode ini diimplementasikan oleh kedua kelas adaptor - metode ini memanggil Display () dan metode tampilan masing-masing dari kelas target yang kita implementasikan sebelumnya.

Daftar kode berikut menggambarkan bagaimana Anda dapat menggunakan kelas adaptor ini.

class Program

    {

        static void Main(string[] args)

        {

            ITargetAdapter adapter = new AdapterA(new TargetA());

            adapter.Process();

            adapter = new AdapterB(new TargetB());

            adapter.Process();

            Console.Read();

        }

Seperti yang Anda lihat pada potongan kode di atas, kita perlu meneruskan instance kelas target masing-masing ke konstruktor kelas adaptor.

Saya akan menyajikan diskusi tentang lebih banyak pola desain di posting saya yang akan datang di sini. Pola desain Adaptor bisa menjadi pilihan yang baik saat Anda perlu memanggil kode lama dalam aplikasi Anda. Anda dapat mempelajari lebih lanjut tentang pola desain Adaptor dari artikel ini.