From 2db114a02e858f875a71e56336165f04c3215d18 Mon Sep 17 00:00:00 2001 From: mohammadmehditalib Date: Tue, 26 Sep 2023 01:44:14 +0530 Subject: [PATCH 1/4] singleton pattern --- .../FileBasedConfigurationManagerImpl.java | 51 +++++++++++++++---- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/scaler/lld/design/assignments/singleton/FileBasedConfigurationManagerImpl.java b/src/main/java/com/scaler/lld/design/assignments/singleton/FileBasedConfigurationManagerImpl.java index 15470fc..76dcc04 100644 --- a/src/main/java/com/scaler/lld/design/assignments/singleton/FileBasedConfigurationManagerImpl.java +++ b/src/main/java/com/scaler/lld/design/assignments/singleton/FileBasedConfigurationManagerImpl.java @@ -1,50 +1,81 @@ package com.scaler.lld.design.assignments.singleton; +import java.util.Properties; + public class FileBasedConfigurationManagerImpl extends FileBasedConfigurationManager { + private static FileBasedConfigurationManagerImpl instance = null; + Properties s = this.properties; + + private FileBasedConfigurationManagerImpl() { + + } + @Override public String getConfiguration(String key) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + // throw new UnsupportedOperationException("Unimplemented method + // 'getConfiguration'"); + if (s.containsKey(key)) { + return s.getProperty(key); + } else { + return null; + } + } @Override public T getConfiguration(String key, Class type) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getConfiguration'"); + T ans = null; + if (s.containsKey(key)) { + ans = convert(key, type); + return ans; + } else { + return ans; + } } @Override public void setConfiguration(String key, String value) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'setConfiguration'"); + // throw new UnsupportedOperationException("Unimplemented method + // 'setConfiguration'"); + s.setProperty(key, value); } @Override public void setConfiguration(String key, T value) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'setConfiguration'"); + // throw new UnsupportedOperationException("Unimplemented method + // 'setConfiguration'"); } @Override public void removeConfiguration(String key) { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'removeConfiguration'"); + // throw new UnsupportedOperationException("Unimplemented method + // 'removeConfiguration'"); + s.remove(key); } @Override public void clear() { // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'clear'"); + // throw new UnsupportedOperationException("Unimplemented method 'clear'"); + s.clear(); } public static FileBasedConfigurationManager getInstance() { - // TODO Auto-generated method stub - return null; + if (instance == null) { + instance = new FileBasedConfigurationManagerImpl(); + return instance; + } else { + return instance; + } } public static void resetInstance() { - // TODO Auto-generated method stub + instance = null; } } \ No newline at end of file From 2b5e509410e2ed1062a60638d298db60cf2ba2cd Mon Sep 17 00:00:00 2001 From: mohammadmehditalib Date: Fri, 29 Sep 2023 02:55:45 +0530 Subject: [PATCH 2/4] builder pattern --- .../builder/DatabaseConfigurationBuilder.java | 67 ++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/scaler/lld/design/assignments/builder/DatabaseConfigurationBuilder.java b/src/main/java/com/scaler/lld/design/assignments/builder/DatabaseConfigurationBuilder.java index 592aa32..ff9093d 100644 --- a/src/main/java/com/scaler/lld/design/assignments/builder/DatabaseConfigurationBuilder.java +++ b/src/main/java/com/scaler/lld/design/assignments/builder/DatabaseConfigurationBuilder.java @@ -2,5 +2,70 @@ @WithBuilder public class DatabaseConfigurationBuilder { + private String databaseUrl; + private String username; + private String password; + private int maxConnections; + private boolean enableCache; + private boolean isReadOnly; -} \ No newline at end of file + /// immutable + private DatabaseConfigurationBuilder() { + + } + + //// friend class + public static class Builder { + + private String databaseUrl; + private String username; + private String password; + private int maxConnections; + private boolean enableCache; + private boolean isReadOnly; + + private Builder(){ + + } + + + public Builder setDatabaseUrl(String databaseUrl) { + this.databaseUrl = databaseUrl; + return this; + } + + public Builder setUsernameAndPassword(String username, String password) { + this.username = username; + this.password = password; + return this; + } + + public Builder setMaxConnections(int maxConnections) { + this.maxConnections = maxConnections; + return this; + } + + public Builder isEnableCache(boolean enableCache) { + this.enableCache = enableCache; + return this; + } + + public Builder isReadOnly(boolean isReadOnly) { + this.isReadOnly = isReadOnly; + return this; + } + + public DatabaseConfigurationBuilder build() { + DatabaseConfigurationBuilder obj =new DatabaseConfigurationBuilder(); + obj.databaseUrl=this.databaseUrl; + obj.username=this.username; + obj.password=this.password; + obj.maxConnections=this.maxConnections; + obj.enableCache=this.enableCache; + obj.isReadOnly=this.isReadOnly; + return obj; + } + + } + +} From bc5bddc3eb398d6009b5854d3dc0351bf6d706c9 Mon Sep 17 00:00:00 2001 From: mohammadmehditalib Date: Mon, 2 Oct 2023 04:35:31 +0530 Subject: [PATCH 3/4] implementing prototype --- .../assignments/prototype/Configuration.java | 28 ++++++++++++++++-- .../assignments/prototype/Registry.java | 29 +++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/scaler/lld/design/assignments/prototype/Registry.java diff --git a/src/main/java/com/scaler/lld/design/assignments/prototype/Configuration.java b/src/main/java/com/scaler/lld/design/assignments/prototype/Configuration.java index 597f36e..8dd5483 100644 --- a/src/main/java/com/scaler/lld/design/assignments/prototype/Configuration.java +++ b/src/main/java/com/scaler/lld/design/assignments/prototype/Configuration.java @@ -1,6 +1,6 @@ package com.scaler.lld.design.assignments.prototype; -public class Configuration { +public class Configuration implements ClonableObject { private String themeColor; private Boolean autoSave; private String language; @@ -9,7 +9,8 @@ public class Configuration { private String fontFamily; private ConfigurationType type; - public Configuration(String themeColor, Boolean autoSave, String language, Boolean darkMode, Integer fontSize, String fontFamily, ConfigurationType type) { + public Configuration(String themeColor, Boolean autoSave, String language, Boolean darkMode, Integer fontSize, + String fontFamily, ConfigurationType type) { this.themeColor = themeColor; this.autoSave = autoSave; this.language = language; @@ -19,6 +20,21 @@ public Configuration(String themeColor, Boolean autoSave, String language, Boole this.type = type; } + public Configuration() { + + } + + public Configuration Configuration(Configuration ref) { + ref.themeColor = this.themeColor; + ref.autoSave = this.autoSave; + ref.language = this.language; + ref.darkMode = this.darkMode; + ref.fontSize = this.fontSize; + ref.fontFamily = this.fontFamily; + ref.type = this.type; + return ref; + } + public String getThemeColor() { return themeColor; } @@ -46,4 +62,12 @@ public String getFontFamily() { public ConfigurationType getType() { return type; } + + @Override + public Object cloneObject() { + Configuration ref = new Configuration(); + return Configuration(ref); + + } + } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/prototype/Registry.java b/src/main/java/com/scaler/lld/design/assignments/prototype/Registry.java new file mode 100644 index 0000000..ded8086 --- /dev/null +++ b/src/main/java/com/scaler/lld/design/assignments/prototype/Registry.java @@ -0,0 +1,29 @@ +package com.scaler.lld.design.assignments.prototype; + +import java.util.HashMap; + +public class Registry implements ConfigurationPrototypeRegistry { + + HashMap storage = new HashMap<>(); + + @Override + public void addPrototype(Configuration user) { + + storage.put(user.getType(), user); + + } + + @Override + public Configuration getPrototype(ConfigurationType type) { + + return storage.get(type); + } + + @Override + public Configuration clone(ConfigurationType type) { + + return (Configuration) storage.get(type).cloneObject(); + + } + +} From f87bc5accf5c049f0b863e830a25c2d2263adc81 Mon Sep 17 00:00:00 2001 From: mohammadmehditalib Date: Mon, 23 Oct 2023 15:35:24 +0530 Subject: [PATCH 4/4] simple factory implementation --- .../design/assignments/factory/AudioPlayer.java | 16 ++++++++++++++++ .../assignments/factory/AudioPlayerFactory.java | 12 ++++++++++++ .../design/assignments/factory/FLACPlayer.java | 5 ++--- .../design/assignments/factory/MP3Player.java | 5 ++--- .../design/assignments/factory/WAVPlayer.java | 5 ++--- 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayer.java b/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayer.java index bfcfd06..ee5c907 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayer.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayer.java @@ -2,5 +2,21 @@ public abstract class AudioPlayer { + private int volume; + private double playBackRate; + + AudioPlayer(int volume, double playBackRate) { + this.playBackRate = playBackRate; + this.volume = volume; + } + public abstract MediaFormat supportsType(); + + public abstract void play(); + + public abstract void pause(); + + public abstract void stop(); + + } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayerFactory.java b/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayerFactory.java index 8c05c29..d00c290 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayerFactory.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/AudioPlayerFactory.java @@ -1,4 +1,16 @@ package com.scaler.lld.design.assignments.factory; public class AudioPlayerFactory { + static AudioPlayer createAudioPlayer(MediaFormat format, int volume, double playBackRate) { + if (format == MediaFormat.FLAC) { + FLACPlayer FlacObj = new FLACPlayer(volume, playBackRate); + return FlacObj; + } else if (format == MediaFormat.MP3) { + MP3Player Mp3Obj = new MP3Player(volume, playBackRate); + return Mp3Obj; + } else { + WAVPlayer WavObj = new WAVPlayer(volume, playBackRate); + return WavObj; + } + } } \ No newline at end of file diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/FLACPlayer.java b/src/main/java/com/scaler/lld/design/assignments/factory/FLACPlayer.java index 8b39d1c..f0f61e2 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/FLACPlayer.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/FLACPlayer.java @@ -1,12 +1,11 @@ package com.scaler.lld.design.assignments.factory; -public class FLACPlayer { +public class FLACPlayer extends AudioPlayer { private int volume; private double playBackRate; public FLACPlayer(int volume, double playBackRate) { - this.volume = volume; - this.playBackRate = playBackRate; + super(volume, playBackRate); } public void play() { diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/MP3Player.java b/src/main/java/com/scaler/lld/design/assignments/factory/MP3Player.java index 9e727db..e5c3b00 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/MP3Player.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/MP3Player.java @@ -1,12 +1,11 @@ package com.scaler.lld.design.assignments.factory; -public class MP3Player { +public class MP3Player extends AudioPlayer { private int volume; private double playBackRate; public MP3Player(int volume, double playBackRate) { - this.volume = volume; - this.playBackRate = playBackRate; + super(volume, playBackRate); } public void play() { diff --git a/src/main/java/com/scaler/lld/design/assignments/factory/WAVPlayer.java b/src/main/java/com/scaler/lld/design/assignments/factory/WAVPlayer.java index c2e22fa..8ac216b 100644 --- a/src/main/java/com/scaler/lld/design/assignments/factory/WAVPlayer.java +++ b/src/main/java/com/scaler/lld/design/assignments/factory/WAVPlayer.java @@ -1,12 +1,11 @@ package com.scaler.lld.design.assignments.factory; -public class WAVPlayer { +public class WAVPlayer extends AudioPlayer { private int volume; private double playBackRate; public WAVPlayer(int volume, double playBackRate) { - this.volume = volume; - this.playBackRate = playBackRate; + super(volume, playBackRate); } public void play() {