Sobes.tech
Junior — Middle

Yazılım mühendisliğinde adaptör deseninin nasıl uygulandığına bir örnek verebilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Adaptör deseni, uyumsuz arayüzlere sahip nesnelerin birlikte çalışmasını sağlar; bir sınıfın arayüzünü, müşterinin beklediği arayüze dönüştürerek.

Java örneği: Diyelim ki MediaPlayer adlı bir arayüzümüz var ve play(String audioType, String fileName) metodunu içeriyor, ayrıca AdvancedMediaPlayer adlı bir sınıf ve playVlc(String fileName) ile playMp4(String fileName) metodlarına sahip. AdvancedMediaPlayerMediaPlayer aracılığıyla kullanmak için bir adaptör oluşturuyoruz:

// Hedef arayüz
interface MediaPlayer {
    void play(String audioType, String fileName);
}

// Mevcut arayüz
interface AdvancedMediaPlayer {
    void playVlc(String fileName);
    void playMp4(String fileName);
}

// Somut uygulamalar
class VlcPlayer implements AdvancedMediaPlayer {
    public void playVlc(String fileName) {
        System.out.println("VLC dosyası oynatılıyor: " + fileName);
    }
    public void playMp4(String fileName) { }
}

class Mp4Player implements AdvancedMediaPlayer {
    public void playVlc(String fileName) { }
    public void playMp4(String fileName) {
        System.out.println("MP4 dosyası oynatılıyor: " + fileName);
    }
}

// Adaptör
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();
        }
    }

    public void play(String audioType, String fileName) {
        if(audioType.equalsIgnoreCase("vlc")) {
            advancedMusicPlayer.playVlc(fileName);
        } else if(audioType.equalsIgnoreCase("mp4")) {
            advancedMusicPlayer.playMp4(fileName);
        }
    }
}

// Müşteri
class AudioPlayer implements MediaPlayer {
    MediaAdapter mediaAdapter;

    public void play(String audioType, String fileName) {
        if(audioType.equalsIgnoreCase("mp3")) {
            System.out.println("mp3 dosyası oynatılıyor: " + fileName);
        } else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")) {
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        } else {
            System.out.println("Geçersiz medya türü: " + audioType);
        }
    }
}

Bu şekilde, AudioPlayer desteklemediği formatları çalmak için MediaAdapter kullanır ve arayüz uyumluluğunu sağlar.