Sobes.tech
Junior — Middle

Poți oferi un exemplu despre cum se aplică pattern-ul adaptor în ingineria software?

sobes.tech AI

Răspuns de la AI

Modelul adaptor permite obiectelor cu interfețe incompatibile să lucreze împreună, transformând interfața unei clase în interfața așteptată de client.

Exemplu în Java: să presupunem că avem o interfață MediaPlayer cu metoda play(String audioType, String fileName), și o clasă AdvancedMediaPlayer cu metodele playVlc(String fileName) și playMp4(String fileName). Pentru a folosi AdvancedMediaPlayer prin MediaPlayer, creăm un adaptor:

// Interfața țintă
interface MediaPlayer {
    void play(String audioType, String fileName);
}

// Interfața existentă
interface AdvancedMediaPlayer {
    void playVlc(String fileName);
    void playMp4(String fileName);
}

// Implementări concrete
class VlcPlayer implements AdvancedMediaPlayer {
    public void playVlc(String fileName) {
        System.out.println("Redare fișier vlc: " + fileName);
    }
    public void playMp4(String fileName) { }
}

class Mp4Player implements AdvancedMediaPlayer {
    public void playVlc(String fileName) { }
    public void playMp4(String fileName) {
        System.out.println("Redare fișier mp4: " + fileName);
    }
}

// Adaptator
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);
        }
    }
}

// Client
class AudioPlayer implements MediaPlayer {
    MediaAdapter mediaAdapter;

    public void play(String audioType, String fileName) {
        if(audioType.equalsIgnoreCase("mp3")) {
            System.out.println("Redare fișier mp3: " + fileName);
        } else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")) {
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        } else {
            System.out.println("Tip media invalid: " + audioType);
        }
    }
}

Astfel, AudioPlayer folosește MediaAdapter pentru redarea formatelor pe care nu le suportă direct, asigurând compatibilitatea interfețelor.