Sync Singleton to Java 25: split 6 implementations into separate files, consolidated Main.java demo

This commit is contained in:
2026-06-23 11:11:02 +05:30
parent 2fbf89875b
commit 4b6a02f396
9 changed files with 176 additions and 23 deletions

View File

@@ -1,9 +1,36 @@
package singleton;
public class Main {
public static void main(String[] args) {
AppConfig config1 = AppConfig.getInstance();
AppConfig config2 = AppConfig.getInstance();
System.out.println("Same instance? " + (config1 == config2)); // true
System.out.println("db.url = " + config1.getProperty("db.url"));
System.out.println("--- Implementation 1: Eager ---");
AppConfigEager eager1 = AppConfigEager.getInstance();
AppConfigEager eager2 = AppConfigEager.getInstance();
System.out.println("Same instance? " + (eager1 == eager2));
System.out.println("db.url = " + eager1.getProperty("db.url"));
System.out.println("\n--- Implementation 2: Naive Lazy ---");
AppConfigNaiveLazy lazy1 = AppConfigNaiveLazy.getInstance();
AppConfigNaiveLazy lazy2 = AppConfigNaiveLazy.getInstance();
System.out.println("Same instance? " + (lazy1 == lazy2));
System.out.println("\n--- Implementation 3: Synchronized Method ---");
AppConfigSynchronized sync1 = AppConfigSynchronized.getInstance();
AppConfigSynchronized sync2 = AppConfigSynchronized.getInstance();
System.out.println("Same instance? " + (sync1 == sync2));
System.out.println("\n--- Implementation 4: Double-Checked Locking ---");
AppConfigDCL dcl1 = AppConfigDCL.getInstance();
AppConfigDCL dcl2 = AppConfigDCL.getInstance();
System.out.println("Same instance? " + (dcl1 == dcl2));
System.out.println("\n--- Implementation 5: Holder Idiom ---");
AppConfigHolder holder1 = AppConfigHolder.getInstance();
AppConfigHolder holder2 = AppConfigHolder.getInstance();
System.out.println("Same instance? " + (holder1 == holder2));
System.out.println("\n--- Implementation 6: Enum ---");
AppConfigEnum enumConfig = AppConfigEnum.INSTANCE;
System.out.println("db.url = " + enumConfig.getProperty("db.url"));
}
}