From 33a0451460bf6a0b46e01d02150b695b95db1f75 Mon Sep 17 00:00:00 2001 From: Nishant Kumar Date: Thu, 19 Oct 2023 21:43:10 +0530 Subject: [PATCH] adapter-pattern-assignment --- .../abstractfactory/AudioFactory.java | 10 ++++++- .../abstractfactory/FLACAudioFactory.java | 28 ++++++++++++++++++- .../abstractfactory/MP3AudioFactory.java | 28 ++++++++++++++++++- .../processor/AudioProcessor.java | 6 ++-- .../processor/MP3AudioProcessor.java | 1 - 5 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/AudioFactory.java b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/AudioFactory.java index 26dfa16..29a9a01 100644 --- a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/AudioFactory.java +++ b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/AudioFactory.java @@ -1,5 +1,13 @@ package com.scaler.lld.design.assignments.abstractfactory; +import com.scaler.lld.design.assignments.abstractfactory.decoder.AudioDecoder; +import com.scaler.lld.design.assignments.abstractfactory.player.AudioPlayer; +import com.scaler.lld.design.assignments.abstractfactory.processor.AudioProcessor; +import com.scaler.lld.design.assignments.abstractfactory.processor.FLACAudioProcessor; + public abstract class AudioFactory { - public abstract MediaFormat supportsFormat(); + public abstract MediaFormat supportsType(); + public abstract AudioProcessor createAudioProcessor(byte[] bytes); + public abstract AudioDecoder audioDecoder(byte[] bytes); + public abstract AudioPlayer createPlayer(int volume, double playbackRate); } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/FLACAudioFactory.java b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/FLACAudioFactory.java index 9ae1221..4759089 100644 --- a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/FLACAudioFactory.java +++ b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/FLACAudioFactory.java @@ -1,4 +1,30 @@ package com.scaler.lld.design.assignments.abstractfactory; -public class FLACAudioFactory { +import com.scaler.lld.design.assignments.abstractfactory.decoder.AudioDecoder; +import com.scaler.lld.design.assignments.abstractfactory.decoder.FLACDecoder; +import com.scaler.lld.design.assignments.abstractfactory.player.AudioPlayer; +import com.scaler.lld.design.assignments.abstractfactory.player.FLACPlayer; +import com.scaler.lld.design.assignments.abstractfactory.processor.AudioProcessor; +import com.scaler.lld.design.assignments.abstractfactory.processor.FLACAudioProcessor; + +public class FLACAudioFactory extends AudioFactory { + @Override + public MediaFormat supportsType() { + return MediaFormat.FLAC; + } + + @Override + public AudioProcessor createAudioProcessor(byte[] bytes) { + return new FLACAudioProcessor(bytes); + } + + @Override + public AudioDecoder audioDecoder(byte[] bytes) { + return new FLACDecoder(bytes); + } + + @Override + public AudioPlayer createPlayer(int volume, double playbackRate) { + return new FLACPlayer(volume, playbackRate); + } } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/MP3AudioFactory.java b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/MP3AudioFactory.java index 95be222..641020e 100644 --- a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/MP3AudioFactory.java +++ b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/MP3AudioFactory.java @@ -1,4 +1,30 @@ package com.scaler.lld.design.assignments.abstractfactory; -public class MP3AudioFactory { +import com.scaler.lld.design.assignments.abstractfactory.decoder.AudioDecoder; +import com.scaler.lld.design.assignments.abstractfactory.decoder.MP3Decoder; +import com.scaler.lld.design.assignments.abstractfactory.player.AudioPlayer; +import com.scaler.lld.design.assignments.abstractfactory.player.MP3Player; +import com.scaler.lld.design.assignments.abstractfactory.processor.AudioProcessor; +import com.scaler.lld.design.assignments.abstractfactory.processor.MP3AudioProcessor; + +public class MP3AudioFactory extends AudioFactory { + @Override + public MediaFormat supportsType() { + return MediaFormat.MP3; + } + + @Override + public AudioProcessor createAudioProcessor(byte[] bytes) { + return new MP3AudioProcessor(bytes); + } + + @Override + public AudioDecoder audioDecoder(byte[] bytes) { + return new MP3Decoder(bytes); + } + + @Override + public AudioPlayer createPlayer(int volume, double playbackRate) { + return new MP3Player(volume, playbackRate); + } } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/processor/AudioProcessor.java b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/processor/AudioProcessor.java index b2bbfa3..f43d65d 100644 --- a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/processor/AudioProcessor.java +++ b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/processor/AudioProcessor.java @@ -2,7 +2,9 @@ import com.scaler.lld.design.assignments.abstractfactory.MediaFormat; +import lombok.Getter; +@Getter public abstract class AudioProcessor { private final byte[] audioData; @@ -11,10 +13,6 @@ public AudioProcessor(byte[] audioData) { this.audioData = audioData; } - public byte[] getAudioData() { - return audioData; - } - public abstract MediaFormat supportsFormat(); public abstract byte[] process(); diff --git a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/processor/MP3AudioProcessor.java b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/processor/MP3AudioProcessor.java index e972f80..8d6d0b9 100644 --- a/src/main/java/com/scaler/lld/design/assignments/abstractfactory/processor/MP3AudioProcessor.java +++ b/src/main/java/com/scaler/lld/design/assignments/abstractfactory/processor/MP3AudioProcessor.java @@ -4,7 +4,6 @@ import com.scaler.lld.design.assignments.abstractfactory.MediaFormat; public class MP3AudioProcessor extends AudioProcessor { - public MP3AudioProcessor(byte[] audioData) { super(audioData); }