package singleton; public class Main { public static void main(String[] args) { 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")); } }