From 7c3a3a0fe0286ab788236e1f7f235159fedd60fc Mon Sep 17 00:00:00 2001 From: prashantpiyush1111 Date: Sun, 14 Jun 2026 13:49:51 +0530 Subject: [PATCH 1/5] refactor: apply Factory Enum Pattern for cleaner object instantiation --- .../main/java/com/iluwatar/factory/App.java | 4 ++-- .../java/com/iluwatar/factory/CoinType.java | 14 ++++++++++- .../com/iluwatar/factory/CoinFactoryTest.java | 24 ++++++++++++++----- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/factory/src/main/java/com/iluwatar/factory/App.java b/factory/src/main/java/com/iluwatar/factory/App.java index ce9f205b0f15..d1fe7f115cd1 100644 --- a/factory/src/main/java/com/iluwatar/factory/App.java +++ b/factory/src/main/java/com/iluwatar/factory/App.java @@ -40,8 +40,8 @@ public class App { /** Program main entry point. */ public static void main(String[] args) { LOGGER.info("The alchemist begins his work."); - var coin1 = CoinFactory.getCoin(CoinType.COPPER); - var coin2 = CoinFactory.getCoin(CoinType.GOLD); + var coin1 = CoinType.COPPER.getInstance(); + var coin2 = CoinType.GOLD.getInstance(); LOGGER.info(coin1.getDescription()); LOGGER.info(coin2.getDescription()); } diff --git a/factory/src/main/java/com/iluwatar/factory/CoinType.java b/factory/src/main/java/com/iluwatar/factory/CoinType.java index de1583bf9099..ef39615519b1 100644 --- a/factory/src/main/java/com/iluwatar/factory/CoinType.java +++ b/factory/src/main/java/com/iluwatar/factory/CoinType.java @@ -25,6 +25,7 @@ package com.iluwatar.factory; import java.util.function.Supplier; +import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -36,4 +37,15 @@ public enum CoinType { GOLD(GoldCoin::new); private final Supplier constructor; -} + + @Getter(AccessLevel.NONE) + private Coin instance; + + /** Returns singleton instance of this coin type. */ + public Coin getInstance() { + if (instance == null) { + instance = constructor.get(); + } + return instance; + } +} \ No newline at end of file diff --git a/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java b/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java index f7cf7799e8b6..78361e5da014 100644 --- a/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java +++ b/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java @@ -30,9 +30,21 @@ class CoinFactoryTest { - @Test - void shouldReturnGoldCoinInstance() { - final var goldCoin = CoinFactory.getCoin(CoinType.GOLD); - assertTrue(goldCoin instanceof GoldCoin); - } -} + @Test + void shouldReturnCopperCoinInstance() { + final var copperCoin = CoinType.COPPER.getInstance(); + assertTrue(copperCoin instanceof CopperCoin); + } + + @Test + void shouldReturnGoldCoinInstance() { + final var goldCoin = CoinType.GOLD.getInstance(); + assertTrue(goldCoin instanceof GoldCoin); + } + + @Test + void shouldReturnSameInstanceEachTime() { + assertSame(CoinType.GOLD.getInstance(), CoinType.GOLD.getInstance()); + assertSame(CoinType.COPPER.getInstance(), CoinType.COPPER.getInstance()); + } + } \ No newline at end of file From 106b065bae74802b769acc5a73a35f6646c5851f Mon Sep 17 00:00:00 2001 From: prashantpiyush1111 Date: Sun, 14 Jun 2026 14:06:30 +0530 Subject: [PATCH 2/5] style: fix formatting in CoinFactoryTest --- .../com/iluwatar/factory/CoinFactoryTest.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java b/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java index 78361e5da014..e0770962db44 100644 --- a/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java +++ b/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java @@ -30,21 +30,21 @@ class CoinFactoryTest { - @Test - void shouldReturnCopperCoinInstance() { - final var copperCoin = CoinType.COPPER.getInstance(); - assertTrue(copperCoin instanceof CopperCoin); - } + @Test + void shouldReturnCopperCoinInstance() { + final var copperCoin = CoinType.COPPER.getInstance(); + assertTrue(copperCoin instanceof CopperCoin); + } - @Test - void shouldReturnGoldCoinInstance() { - final var goldCoin = CoinType.GOLD.getInstance(); - assertTrue(goldCoin instanceof GoldCoin); - } + @Test + void shouldReturnGoldCoinInstance() { + final var goldCoin = CoinType.GOLD.getInstance(); + assertTrue(goldCoin instanceof GoldCoin); + } - @Test - void shouldReturnSameInstanceEachTime() { - assertSame(CoinType.GOLD.getInstance(), CoinType.GOLD.getInstance()); - assertSame(CoinType.COPPER.getInstance(), CoinType.COPPER.getInstance()); - } - } \ No newline at end of file + @Test + void shouldReturnSameInstanceEachTime() { + assertSame(CoinType.GOLD.getInstance(), CoinType.GOLD.getInstance()); + assertSame(CoinType.COPPER.getInstance(), CoinType.COPPER.getInstance()); + } +} \ No newline at end of file From 402abb4f6251c3382d3a90ef820de12e41c93dc0 Mon Sep 17 00:00:00 2001 From: prashantpiyush1111 Date: Sun, 14 Jun 2026 14:34:48 +0530 Subject: [PATCH 3/5] refactor(factory): apply enum-based factory pattern --- .../com/iluwatar/factory/CoinFactoryTest.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java b/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java index e0770962db44..100e026bc528 100644 --- a/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java +++ b/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java @@ -30,21 +30,21 @@ class CoinFactoryTest { - @Test - void shouldReturnCopperCoinInstance() { - final var copperCoin = CoinType.COPPER.getInstance(); - assertTrue(copperCoin instanceof CopperCoin); - } + @Test + void shouldReturnCopperCoinInstance() { + final var copperCoin = CoinType.COPPER.getInstance(); + assertTrue(copperCoin instanceof CopperCoin); + } - @Test - void shouldReturnGoldCoinInstance() { - final var goldCoin = CoinType.GOLD.getInstance(); - assertTrue(goldCoin instanceof GoldCoin); - } + @Test + void shouldReturnGoldCoinInstance() { + final var goldCoin = CoinType.GOLD.getInstance(); + assertTrue(goldCoin instanceof GoldCoin); + } - @Test - void shouldReturnSameInstanceEachTime() { - assertSame(CoinType.GOLD.getInstance(), CoinType.GOLD.getInstance()); - assertSame(CoinType.COPPER.getInstance(), CoinType.COPPER.getInstance()); - } + @Test + void shouldReturnSameInstanceEachTime() { + assertSame(CoinType.GOLD.getInstance(), CoinType.GOLD.getInstance()); + assertSame(CoinType.COPPER.getInstance(), CoinType.COPPER.getInstance()); + } } \ No newline at end of file From 1e2350a7fa9b105739f56ad3f84b201f60cd6125 Mon Sep 17 00:00:00 2001 From: prashantpiyush1111 Date: Sun, 14 Jun 2026 14:46:02 +0530 Subject: [PATCH 4/5] style(factory): fix test indentation --- .../com/iluwatar/factory/CoinFactoryTest.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java b/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java index 100e026bc528..212a07353cd8 100644 --- a/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java +++ b/factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java @@ -30,21 +30,21 @@ class CoinFactoryTest { - @Test - void shouldReturnCopperCoinInstance() { - final var copperCoin = CoinType.COPPER.getInstance(); - assertTrue(copperCoin instanceof CopperCoin); - } + @Test + void shouldReturnCopperCoinInstance() { + final var copperCoin = CoinType.COPPER.getInstance(); + assertTrue(copperCoin instanceof CopperCoin); + } - @Test - void shouldReturnGoldCoinInstance() { - final var goldCoin = CoinType.GOLD.getInstance(); - assertTrue(goldCoin instanceof GoldCoin); - } + @Test + void shouldReturnGoldCoinInstance() { + final var goldCoin = CoinType.GOLD.getInstance(); + assertTrue(goldCoin instanceof GoldCoin); + } - @Test - void shouldReturnSameInstanceEachTime() { - assertSame(CoinType.GOLD.getInstance(), CoinType.GOLD.getInstance()); - assertSame(CoinType.COPPER.getInstance(), CoinType.COPPER.getInstance()); - } -} \ No newline at end of file + @Test + void shouldReturnSameInstanceEachTime() { + assertSame(CoinType.GOLD.getInstance(), CoinType.GOLD.getInstance()); + assertSame(CoinType.COPPER.getInstance(), CoinType.COPPER.getInstance()); + } +} From 569afc88ab96757505b5eb97fee9a0dbbbce37de Mon Sep 17 00:00:00 2001 From: prashantpiyush1111 Date: Sun, 14 Jun 2026 14:52:50 +0530 Subject: [PATCH 5/5] style(factory): add trailing newline --- factory/src/main/java/com/iluwatar/factory/CoinType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/factory/src/main/java/com/iluwatar/factory/CoinType.java b/factory/src/main/java/com/iluwatar/factory/CoinType.java index ef39615519b1..31eb6a3aead8 100644 --- a/factory/src/main/java/com/iluwatar/factory/CoinType.java +++ b/factory/src/main/java/com/iluwatar/factory/CoinType.java @@ -48,4 +48,4 @@ public Coin getInstance() { } return instance; } -} \ No newline at end of file +}