Sobes.tech
Junior — Middle

Kas saaks anda näite, kuidas rakendatakse adapteri mustrit tarkvarainseneriteaduses?

sobes.tech AI

Vastus AI-lt

Adapteri muster võimaldab objektidel, millel on sobimatud liidesed, koos töötada, muutes ühe klassi liidest kliendi ootuspäraseks.

Näide Java keeles: oletame, et meil on MediaPlayer liides, millel on meetod play(String audioType, String fileName), ning on klass AdvancedMediaPlayer koos meetoditega playVlc(String fileName) ja playMp4(String fileName). Kasutame AdvancedMediaPlayer koos MediaPlayer-iga adapteri loomisega:

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

// Olemasolev liides
interface AdvancedMediaPlayer {
    void playVlc(String fileName);
    void playMp4(String fileName);
}

// Konkreetne teostus
class VlcPlayer implements AdvancedMediaPlayer {
    public void playVlc(String fileName) {
        System.out.println("VLC faili mängitakse: " + fileName);
    }
    public void playMp4(String fileName) { }
}

class Mp4Player implements AdvancedMediaPlayer {
    public void playVlc(String fileName) { }
    public void playMp4(String fileName) {
        System.out.println("MP4 faili mängitakse: " + fileName);
    }
}

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

// Klient
class AudioPlayer implements MediaPlayer {
    MediaAdapter mediaAdapter;

    public void play(String audioType, String fileName) {
        if(audioType.equalsIgnoreCase("mp3")) {
            System.out.println("MP3 faili mängitakse: " + fileName);
        } else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")) {
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        } else {
            System.out.println("Kehtetu meediumitüüp: " + audioType);
        }
    }
}

Seega kasutab AudioPlayer MediaAdapter-it vormingute esitamiseks, mida ta otse ei toeta, tagades liideste ühilduvuse.