دیزاین پترن Adapter

دیزاین پترن Adapter

راستش رو بخواید به سختی خودم یاد گرفتم که این آداپتر دقیقا چیه !
نحوه کار کردنش در برنامه نویسی اندروید رو میتونم با RecyclerView.Adapter مثال بزنم اما توضیح دادن در موردش برام خیلی سخته 🙂


فرض کنید ، میخواهیم یک AudioPlayer بسازیم ! که مثلا بتونیم MP3 یا AVI هارو صدا بزنیم و پخش کنیم .

  • برای شروع اول یک Interface به شکل زیر و با نام AdvancedMediaPlayer میسازیم . که دارای پخش MP3 و VLC است .



public interface AdvancedMediaPlayer {
    public void playVlc(String fileName);
    public void playMp4(String fileName);
}




  • خب حالا میخواهیم کلاس های پخش MP3 و VLC رو بسازیم.

تکته : برای تمرین کلاس VLC رو بسازید .




public class Mp4Player implements AdvancedMediaPlayer{
    @Override
    public void playVlc(String fileName) {

    }

    @Override
    public void playMp4(String fileName) {
        System.out.println("Playing mp4 file. Name: "+ fileName);
    }
}


خب همانطور که مشاهده میکنید کلاس ما از adavancedMediaPlayer استفاده کرده و تابع پخش بر اساس نیازمون رو کد نویسی کردیم که در کد فوق برای MP3 میباشد .



  • خب برای ساخت آداپتر نیاز به Interface به شکل زیر داریم


public interface MediaPlayer {
    public void play(String audioType, String fileName);
}


همانطور که مشاهده میکنید تابع Play یک نوع و یک نام فایل از ما میخواهد

  • که در کلاس زیر یعنی آداپتر از این رابط استفده میکنیم .


public class MediaAdapter implements MediaPlayer {

    AdvancedMediaPlayer advancedMusicPlayer;

    public MediaAdapter(String audioType){

        if(audioType.equalsIgnoreCase("vlc") ){
            advancedMusicPlayer = new VlcPlayer();

        }else if (audioType.equalsIgnoreCase("mp4")){
            advancedMusicPlayer = new Mp4Player();
        }
    }

    @Override
    public void play(String audioType, String fileName) {

        if(audioType.equalsIgnoreCase("vlc")){
            advancedMusicPlayer.playVlc(fileName);
        }
        else if(audioType.equalsIgnoreCase("mp4")){
            advancedMusicPlayer.playMp4(fileName);
        }
    }
}

همانطور مشاهده میکنید ما کلاسهایی که ساختیم رو در این آداپتر صدا زدیم و بر اساس نیازمون و نوعی که به تابع Play میدیم مثلا فایل رو پخش میکنیم .

  • حالا میریم سراغ ساخت کلاس اصلیمون یعنی AudioPlayer که از آداپتر هم استفاده کنیم .


public class AudioPlayer implements MediaPlayer {
    MediaAdapter mediaAdapter;

    @Override
    public void play(String audioType, String fileName) {

        //inbuilt support to play mp3 music files
        if(audioType.equalsIgnoreCase("mp3")){
            System.out.println("Playing mp3 file. Name: " + fileName);
        }

        //mediaAdapter is providing support to play other file formats
        else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")){
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        }

        else{
            System.out.println("Invalid media. " + audioType + " format not supported");
        }
    }
}


فکر نمیکنم کلاس فوق نیاز به تعریف خاصی داشته باشه .

  • خب حالا میریم سراغ صدا زدن کلاسمون



        // TODO: Adapter Design Pattern Sample
        AudioPlayer audioPlayer = new AudioPlayer();
        audioPlayer.play("mp3", "beyond the horizon.mp3");
        audioPlayer.play("mp4", "alone.mp4");
        audioPlayer.play("vlc", "far far away.vlc");
        audioPlayer.play("avi", "mind me.avi");





امیدوارم از آموزش فوق لذت برده باشید…

برای دانلود سورس کد لطفا کلیک کنید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *