class MediaPlayer:
@abstractmethod
def play(self, audioType: str, fileName: str):
raise NotImplemented
class AdvancedMediaPlayer:
@abstractmethod
def playVlc(self, fileName: str):
raise NotImplemented
@abstractmethod
def playMp4(self, fileName: str):
raise NotImplemented
class VlcPlayer(AdvancedMediaPlayer):
def playVlc(self, fileName: str):
print(f'Playing vlc file. Name: {fileName}')
def playMp4(self, fileName: str):
raise NotImplemented
class Mp4Player(AdvancedMediaPlayer):
def playVlc(self, fileName: str):
raise NotImplemented
def playMp4(self, fileName: str):
print(f'Playing mp4 file. Name: {fileName}')
class MediaAdapter(MediaPlayer):
advancedMediaPlayer: AdvancedMediaPlayer
def __init__(self, audioType: str):
if audioType == 'vlc':
self.advancedMediaPlayer = VlcPlayer()
elif audioType == 'mp4':
self.advancedMediaPlayer = Mp4Player()
def play(self, audioType: str, fileName: str):
if audioType == 'vlc':
self.advancedMediaPlayer.playVlc(fileName)
elif audioType == 'mp4':
self.advancedMediaPlayer.playMp4(fileName)
class AudioPlayer(MediaPlayer):
mediaAdapter: MediaAdapter
def play(self, audioType: str, fileName: str):
if audioType == 'mp3':
print(f'Playing mp3 file. Name: {fileName}')
elif audioType == 'vlc' or audioType == 'mp4':
self.mediaAdapter = MediaAdapter(audioType)
self.mediaAdapter.play(audioType, fileName)
else:
print(f'Invalid media. {fileName} format not supported')
class AdapterPatternDemo:
def __init__(self):
audioPlayer: AudioPlayer = 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")
if __name__ == '__main__':
AdapterPatternDemo()
BinaryObserver:22
OctalObserver:22
HexaObserver:22