Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.scaler.lld.design.solutions.abstractfactory;

import com.scaler.lld.design.solutions.abstractfactory.player.AudioPlayer;
import com.scaler.lld.design.solutions.abstractfactory.decoder.AudioDecoder;
import com.scaler.lld.design.solutions.abstractfactory.processor.AudioProcessor;

public abstract class AudioFactory {
public abstract MediaFormat supportsFormat();
public abstract AudioDecoder createDecoder(byte[] audioData);
public abstract AudioPlayer createPlayer(int volume, double playbackRate);
public abstract AudioProcessor createProcessor(byte[] audioData);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.scaler.lld.design.solutions.abstractfactory;

import com.scaler.lld.design.solutions.abstractfactory.player.AudioPlayer;
import com.scaler.lld.design.solutions.abstractfactory.player.FLACPlayer;
import com.scaler.lld.design.solutions.abstractfactory.decoder.AudioDecoder;
import com.scaler.lld.design.solutions.abstractfactory.decoder.FLACDecoder;
import com.scaler.lld.design.solutions.abstractfactory.processor.AudioProcessor;
import com.scaler.lld.design.solutions.abstractfactory.processor.FLACAudioProcessor;

public class FLACAudioFactory extends AudioFactory {
@Override
public MediaFormat supportsFormat() {
return MediaFormat.FLAC;
}

@Override
public AudioDecoder createDecoder(byte[] audioData) {
return new FLACDecoder(audioData);
}

@Override
public AudioPlayer createPlayer(int volume, double playbackRate) {
return new FLACPlayer(volume, playbackRate);
}

@Override
public AudioProcessor createProcessor(byte[] audioData) {
return new FLACAudioProcessor(audioData);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.scaler.lld.design.solutions.abstractfactory;

import com.scaler.lld.design.solutions.abstractfactory.player.AudioPlayer;
import com.scaler.lld.design.solutions.abstractfactory.player.MP3Player;
import com.scaler.lld.design.solutions.abstractfactory.decoder.AudioDecoder;
import com.scaler.lld.design.solutions.abstractfactory.decoder.MP3Decoder;
import com.scaler.lld.design.solutions.abstractfactory.processor.AudioProcessor;
import com.scaler.lld.design.solutions.abstractfactory.processor.MP3AudioProcessor;

public class MP3AudioFactory extends AudioFactory {
@Override
public MediaFormat supportsFormat() {
return MediaFormat.MP3;
}

@Override
public AudioDecoder createDecoder(byte[] audioData) {
return new MP3Decoder(audioData);
}

@Override
public AudioPlayer createPlayer(int volume, double playbackRate) {
return new MP3Player(volume, playbackRate);
}

@Override
public AudioProcessor createProcessor(byte[] audioData) {
return new MP3AudioProcessor(audioData);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.scaler.lld.design.solutions.abstractfactory;

public enum MediaFormat {
MP3,
FLAC,
WAV
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.scaler.lld.design.solutions.abstractfactory.decoder;

import com.scaler.lld.design.solutions.abstractfactory.MediaFormat;

public abstract class AudioDecoder {

private final byte[] audioData;

public AudioDecoder(byte[] audioData) {
this.audioData = audioData;
}

public byte[] getAudioData() {
return audioData;
}

public abstract MediaFormat supportsFormat();

public abstract byte[] decode();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.scaler.lld.design.solutions.abstractfactory.decoder;

import com.scaler.lld.design.solutions.abstractfactory.MediaFormat;

public class FLACDecoder extends AudioDecoder {

public FLACDecoder(byte[] audioData) {
super(audioData);
}

@Override
public MediaFormat supportsFormat() {
return MediaFormat.FLAC;
}

@Override
public byte[] decode() {
// Implement FLAC decoding logic
System.out.println("Decoding FLAC audio data...");
// Decoding process
return getAudioData();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.scaler.lld.design.solutions.abstractfactory.decoder;

import com.scaler.lld.design.solutions.abstractfactory.MediaFormat;

public class MP3Decoder extends AudioDecoder {

public MP3Decoder(byte[] audioData) {
super(audioData);
}

@Override
public MediaFormat supportsFormat() {
return MediaFormat.MP3;
}

@Override
public byte[] decode() {
// Implement MP3 decoding logic
System.out.println("Decoding MP3 audio data...");
// Decoding process
return getAudioData();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.scaler.lld.design.solutions.abstractfactory.player;

import com.scaler.lld.design.solutions.abstractfactory.MediaFormat;

public abstract class AudioPlayer {

private int volume;
private double playbackRate;

public AudioPlayer(int volume, double playbackRate) {
this.volume = volume;
this.playbackRate = playbackRate;
}

public abstract MediaFormat supportsFormat();

public abstract void play();

public abstract void pause();

public abstract void stop();

public int getVolume() {
return volume;
}

public double getPlaybackRate() {
return playbackRate;
}

public void setVolume(int volume) {
if (volume >= 0 && volume <= 100) {
this.volume = volume;
System.out.println("Volume set to " + volume);
} else {
System.out.println("Invalid volume level");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.scaler.lld.design.solutions.abstractfactory.player;

import com.scaler.lld.design.solutions.abstractfactory.MediaFormat;

public class FLACPlayer extends AudioPlayer {

public FLACPlayer(int volume, double playBackRate) {
super(volume, playBackRate);
}

@Override
public void play() {
// Simulate playing audio in FLAC format
// Each media format will have its own implementation
System.out.println("Playing FLAC audio");
}

@Override
public void pause() {
// Simulate pausing audio in FLAC format
// Each media format will have its own implementation
System.out.println("Pausing FLAC audio");
}

@Override
public void stop() {
// Simulate stopping audio in FLAC format
// Each media format will have its own implementation
System.out.println("Stopping FLAC audio");
}

public MediaFormat supportsFormat() {
return MediaFormat.FLAC;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.scaler.lld.design.solutions.abstractfactory.player;

import com.scaler.lld.design.solutions.abstractfactory.MediaFormat;

public class MP3Player extends AudioPlayer {

public MP3Player(int volume, double playBackRate) {
super(volume, playBackRate);
}

@Override
public void play() {
// Simulate playing audio in MP3 format
// Each media format will have its own implementation
System.out.println("Playing MP3 audio");
}

@Override
public void pause() {
// Simulate pausing audio in MP3 format
// Each media format will have its own implementation
System.out.println("Pausing MP3 audio");
}

@Override
public void stop() {
// Simulate stopping audio in MP3 format
// Each media format will have its own implementation
System.out.println("Stopping MP3 audio");
}

public MediaFormat supportsFormat() {
return MediaFormat.MP3;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.scaler.lld.design.solutions.abstractfactory.processor;


import com.scaler.lld.design.solutions.abstractfactory.MediaFormat;

public abstract class AudioProcessor {

private final byte[] audioData;

public AudioProcessor(byte[] audioData) {
this.audioData = audioData;
}

public byte[] getAudioData() {
return audioData;
}

public abstract MediaFormat supportsFormat();

public abstract byte[] process();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.scaler.lld.design.solutions.abstractfactory.processor;


import com.scaler.lld.design.solutions.abstractfactory.MediaFormat;

public class FLACAudioProcessor extends AudioProcessor {

public FLACAudioProcessor(byte[] audioData) {
super(audioData);
}

@Override
public MediaFormat supportsFormat() {
return MediaFormat.FLAC;
}

@Override
public byte[] process() {
// Implement FLAC audio processing logic
System.out.println("Processing FLAC audio data...");
// Processing process
return getAudioData();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.scaler.lld.design.solutions.abstractfactory.processor;


import com.scaler.lld.design.solutions.abstractfactory.MediaFormat;

public class MP3AudioProcessor extends AudioProcessor {

public MP3AudioProcessor(byte[] audioData) {
super(audioData);
}

@Override
public MediaFormat supportsFormat() {
return MediaFormat.MP3;
}

@Override
public byte[] process() {
// Implement MP3 audio processing logic
System.out.println("Processing MP3 audio data...");
// Processing process
return getAudioData();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.scaler.lld.design.solutions.adapter;

import com.scaler.lld.design.solutions.adapter.external.GoogleTranslateApi;
import com.scaler.lld.design.solutions.adapter.external.GoogleTranslationRequest;

import java.util.List;

public class GoogleTranslationProviderAdapter implements TranslationProviderAdapter{

private final GoogleTranslateApi api = new GoogleTranslateApi();
@Override
public String convert(TranslationRequest request) {
return api.convert(convertRequest(request));
}

private GoogleTranslationRequest convertRequest(TranslationRequest request) {
return new GoogleTranslationRequest(request.getText(),
request.getSourceLanguage(), request.getTargetLanguage(), request.getConfidenceThreshold());
}

@Override
public List<String> getSupportedLanguages() {
return api.getLanguages();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.scaler.lld.design.solutions.adapter;

import com.scaler.lld.design.solutions.adapter.external.MicrosoftTranslateApi;

import java.util.List;

public class MicrosoftTranslationProviderAdapter implements TranslationProviderAdapter{

private final MicrosoftTranslateApi api = new MicrosoftTranslateApi();
@Override
public String convert(TranslationRequest request) {
return api.translate(request.getText(), request.getSourceLanguage(), request.getTargetLanguage());
}

@Override
public List<String> getSupportedLanguages() {
return api.getSupportedLanguages();
}
}
Loading