diff --git a/abstract-factory/README.md b/abstract-factory/README.md index cc95c382c..0321f7454 100644 --- a/abstract-factory/README.md +++ b/abstract-factory/README.md @@ -20,9 +20,9 @@ objects without specifying their concrete classes. ## Explanation -Real world example +Real-world example -> To create a kingdom we need objects with a common theme. Elven kingdom needs an Elven king, Elven castle and Elven army whereas Orcish kingdom needs an Orcish king, Orcish castle and Orcish army. There is a dependency between the objects in the kingdom. +> To create a kingdom we need objects with a common theme. The elven kingdom needs an elven king, elven castle, and elven army whereas the orcish kingdom needs an orcish king, orcish castle, and orcish army. There is a dependency between the objects in the kingdom. In plain words @@ -34,7 +34,7 @@ Wikipedia says **Programmatic Example** -Translating the kingdom example above. First of all we have some interfaces and implementation for the objects in the +Translating the kingdom example above. First of all, we have some interfaces and implementation for the objects in the kingdom. ```java @@ -52,21 +52,21 @@ public interface Army { // Elven implementations -> public class ElfCastle implements Castle { - static final String DESCRIPTION = "This is the Elven castle!"; + static final String DESCRIPTION = "This is the elven castle!"; @Override public String getDescription() { return DESCRIPTION; } } public class ElfKing implements King { - static final String DESCRIPTION = "This is the Elven king!"; + static final String DESCRIPTION = "This is the elven king!"; @Override public String getDescription() { return DESCRIPTION; } } public class ElfArmy implements Army { - static final String DESCRIPTION = "This is the Elven Army!"; + static final String DESCRIPTION = "This is the elven Army!"; @Override public String getDescription() { return DESCRIPTION; @@ -77,7 +77,7 @@ public class ElfArmy implements Army { ``` -Then we have the abstraction and implementations for the kingdom factory +Then we have the abstraction and implementations for the kingdom factory. ```java public interface KingdomFactory { @@ -111,7 +111,7 @@ public class OrcKingdomFactory implements KingdomFactory { } ``` -Now we have our abstract factory that lets us make family of related objects i.e. Elven kingdom factory creates Elven castle, king and army etc. +Now we have the abstract factory that lets us make a family of related objects i.e. elven kingdom factory creates elven castle, king and army, etc. ```java var factory = new ElfKingdomFactory(); @@ -127,13 +127,13 @@ army.getDescription(); Program output: ```java -This is the Elven castle! -This is the Elven king! -This is the Elven Army! +This is the elven castle! +This is the elven king! +This is the elven Army! ``` -Now, we can design a factory for our different kingdom factories. In this example, we created FactoryMaker, responsible for returning an instance of either ElfKingdomFactory or OrcKingdomFactory. -The client can use FactoryMaker to create the desired concrete factory which, in turn, will produce different concrete objects (Army, King, Castle). +Now, we can design a factory for our different kingdom factories. In this example, we created `FactoryMaker`, responsible for returning an instance of either `ElfKingdomFactory` or `OrcKingdomFactory`. +The client can use `FactoryMaker` to create the desired concrete factory which, in turn, will produce different concrete objects (derived from `Army`, `King`, `Castle`). In this example, we also used an enum to parameterize which type of kingdom factory the client will ask for. ```java @@ -179,8 +179,8 @@ public static void main(String[] args) { Use the Abstract Factory pattern when -* The system should be independent of how its products are created, composed and represented -* The system should be configured with one of multiple families of products +* The system should be independent of how its products are created, composed, and represented +* The system should be configured with one of the multiple families of products * The family of related product objects is designed to be used together, and you need to enforce this constraint * You want to provide a class library of products, and you want to reveal just their interfaces, not their implementations * The lifetime of the dependency is conceptually shorter than the lifetime of the consumer. @@ -200,7 +200,7 @@ Example use cases * Dependency injection in java hides the service class dependencies that can lead to runtime errors that would have been caught at compile time. * While the pattern is great when creating predefined objects, adding the new ones might be challenging. -* The code becomes more complicated than it should be, since a lot of new interfaces and classes are introduced along with the pattern. +* The code becomes more complicated than it should be since a lot of new interfaces and classes are introduced along with the pattern. ## Tutorial diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java index d208002a7..a5a3c74d7 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java @@ -37,7 +37,7 @@ import lombok.extern.slf4j.Slf4j; * *
The essence of the Abstract Factory pattern is a factory interface ({@link KingdomFactory}) * and its implementations ( {@link ElfKingdomFactory}, {@link OrcKingdomFactory}). The example uses - * both concrete implementations to create a king, a castle and an army. + * both concrete implementations to create a king, a castle, and an army. */ @Slf4j public class App implements Runnable { @@ -60,13 +60,13 @@ public class App implements Runnable { @Override public void run() { - LOGGER.info("Elf Kingdom"); + LOGGER.info("elf kingdom"); createKingdom(Kingdom.FactoryMaker.KingdomType.ELF); LOGGER.info(kingdom.getArmy().getDescription()); LOGGER.info(kingdom.getCastle().getDescription()); LOGGER.info(kingdom.getKing().getDescription()); - LOGGER.info("Orc Kingdom"); + LOGGER.info("orc kingdom"); createKingdom(Kingdom.FactoryMaker.KingdomType.ORC); LOGGER.info(kingdom.getArmy().getDescription()); LOGGER.info(kingdom.getCastle().getDescription()); diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java index ad54943aa..91a2393ec 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java @@ -28,7 +28,7 @@ package com.iluwatar.abstractfactory; */ public class ElfArmy implements Army { - static final String DESCRIPTION = "This is the Elven Army!"; + static final String DESCRIPTION = "This is the elven army!"; @Override public String getDescription() { diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java index 9c2ca1d4b..80fadc5cb 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java @@ -28,7 +28,7 @@ package com.iluwatar.abstractfactory; */ public class ElfCastle implements Castle { - static final String DESCRIPTION = "This is the Elven castle!"; + static final String DESCRIPTION = "This is the elven castle!"; @Override public String getDescription() { diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java index aa64a489f..843e057ea 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java @@ -28,7 +28,7 @@ package com.iluwatar.abstractfactory; */ public class ElfKing implements King { - static final String DESCRIPTION = "This is the Elven king!"; + static final String DESCRIPTION = "This is the elven king!"; @Override public String getDescription() { diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java index fa7bf3889..61f04c9d2 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java @@ -28,7 +28,7 @@ package com.iluwatar.abstractfactory; */ public class OrcArmy implements Army { - static final String DESCRIPTION = "This is the Orc Army!"; + static final String DESCRIPTION = "This is the orc army!"; @Override public String getDescription() { diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java index fea7c1866..f394e0a09 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java @@ -28,7 +28,7 @@ package com.iluwatar.abstractfactory; */ public class OrcCastle implements Castle { - static final String DESCRIPTION = "This is the Orc castle!"; + static final String DESCRIPTION = "This is the orc castle!"; @Override public String getDescription() { diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java index 9a47a9d0b..fcc59d4b7 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java @@ -28,7 +28,7 @@ package com.iluwatar.abstractfactory; */ public class OrcKing implements King { - static final String DESCRIPTION = "This is the Orc king!"; + static final String DESCRIPTION = "This is the orc king!"; @Override public String getDescription() { diff --git a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java index 3136ee29f..c77b61d29 100644 --- a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java +++ b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java @@ -29,14 +29,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; /** - * Test for abstract factory. + * Tests for abstract factory. */ class AbstractFactoryTest { private final App app = new App(); @Test - void king() { + void verifyKingCreation() { app.createKingdom(Kingdom.FactoryMaker.KingdomType.ELF); final var kingdom = app.getKingdom(); @@ -51,7 +51,7 @@ class AbstractFactoryTest { } @Test - void castle() { + void verifyCastleCreation() { app.createKingdom(Kingdom.FactoryMaker.KingdomType.ELF); final var kingdom = app.getKingdom(); @@ -66,7 +66,7 @@ class AbstractFactoryTest { } @Test - void army() { + void verifyArmyCreation() { app.createKingdom(Kingdom.FactoryMaker.KingdomType.ELF); final var kingdom = app.getKingdom(); @@ -81,7 +81,7 @@ class AbstractFactoryTest { } @Test - void createElfKingdom() { + void verifyElfKingdomCreation() { app.createKingdom(Kingdom.FactoryMaker.KingdomType.ELF); final var kingdom = app.getKingdom(); @@ -97,7 +97,7 @@ class AbstractFactoryTest { } @Test - void createOrcKingdom() { + void verifyOrcKingdomCreation() { app.createKingdom(Kingdom.FactoryMaker.KingdomType.ORC); final var kingdom = app.getKingdom(); diff --git a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java index c5589895d..5a6e433b8 100644 --- a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java +++ b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java @@ -28,10 +28,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; /** - * Issue: Add at least one assertion to this test case. - * - * Solution: Inserted assertion to check whether the execution of the main method in {@link App} - * throws an exception. + * Check whether the execution of the main method in {@link App} throws an exception. */ class AppTest {