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 d18f1abed..29e9272f6 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java @@ -1,5 +1,6 @@ package com.iluwatar.abstractfactory; + /** * * The essence of the Abstract Factory pattern is a factory interface @@ -12,26 +13,61 @@ package com.iluwatar.abstractfactory; */ public class App { - /** - * Program entry point - * @param args command line arguments - */ - public static void main(String[] args) { - createKingdom(new ElfKingdomFactory()); - createKingdom(new OrcKingdomFactory()); - } + private King king; + private Castle castle; + private Army army; /** * Creates kingdom * @param factory */ - public static void createKingdom(KingdomFactory factory) { - King king = factory.createKing(); - Castle castle = factory.createCastle(); - Army army = factory.createArmy(); - System.out.println("The kingdom was created."); - System.out.println(king); - System.out.println(castle); - System.out.println(army); + public void createKingdom(final KingdomFactory factory) { + setKing(factory.createKing()); + setCastle(factory.createCastle()); + setArmy(factory.createArmy()); + } + + ElfKingdomFactory getElfKingdomFactory() { + return new ElfKingdomFactory(); + } + + OrcKingdomFactory getOrcKingdomFactory() { + return new OrcKingdomFactory(); + } + + King getKing(final KingdomFactory factory) { + return factory.createKing(); + } + + Castle getCastle(final KingdomFactory factory) { + return factory.createCastle(); + } + + Army getArmy(final KingdomFactory factory) { + return factory.createArmy(); + } + + public King getKing() { + return king; + } + + private void setKing(final King king) { + this.king = king; + } + + public Castle getCastle() { + return castle; + } + + private void setCastle(final Castle castle) { + this.castle = castle; + } + + public Army getArmy() { + return army; + } + + private void setArmy(final Army army) { + this.army = army; } } diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java index 225331517..333b5c2cd 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java @@ -7,4 +7,5 @@ package com.iluwatar.abstractfactory; */ public interface Army { + String getDescription(); } diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java index 272a97bf3..0290cb67c 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java @@ -7,4 +7,5 @@ package com.iluwatar.abstractfactory; */ public interface Castle { + String 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 d77fe8ebd..410f46951 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java @@ -7,9 +7,10 @@ package com.iluwatar.abstractfactory; */ public class ElfArmy implements Army { - @Override - public String toString() { - return "This is the Elven Army!"; - } + static final String DESCRIPTION = "This is the Elven Army!"; + @Override + public String getDescription() { + return DESCRIPTION; + } } 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 5c2b2a62a..fe2e9a0e7 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java @@ -7,9 +7,10 @@ package com.iluwatar.abstractfactory; */ public class ElfCastle implements Castle { - @Override - public String toString() { - return "This is the Elven castle!"; - } + static final String DESCRIPTION = "This is the Elven castle!"; + @Override + public String getDescription() { + return DESCRIPTION; + } } 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 df475a354..66571ee01 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java @@ -7,9 +7,10 @@ package com.iluwatar.abstractfactory; */ public class ElfKing implements King { + static final String DESCRIPTION = "This is the Elven king!"; + @Override - public String toString() { - return "This is the Elven king!"; + public String getDescription() { + return DESCRIPTION; } - } diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java index 0b75dbb0a..c7b9a867c 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java @@ -7,4 +7,5 @@ package com.iluwatar.abstractfactory; */ public interface King { + 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 d331252dc..108700511 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java @@ -7,9 +7,10 @@ package com.iluwatar.abstractfactory; */ public class OrcArmy implements Army { - @Override - public String toString() { - return "This is the Orcish Army!"; - } + static final String DESCRIPTION = "This is the Orc Army!"; + @Override + public String getDescription() { + return DESCRIPTION; + } } 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 fd09d9c17..5012f9200 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java @@ -7,9 +7,10 @@ package com.iluwatar.abstractfactory; */ public class OrcCastle implements Castle { - @Override - public String toString() { - return "This is the Orcish castle!"; - } + static final String DESCRIPTION = "This is the Orc castle!"; + @Override + public String getDescription() { + return DESCRIPTION; + } } 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 5bae8f31b..a5657d4e4 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java @@ -7,9 +7,10 @@ package com.iluwatar.abstractfactory; */ public class OrcKing implements King { +static final String DESCRIPTION = "This is the Orc king!"; + @Override - public String toString() { - return "This is the Orc king!"; + public String getDescription() { + return DESCRIPTION; } - } 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 91db0a4be..78cdf8a44 100644 --- a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java +++ b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java @@ -1,18 +1,77 @@ package com.iluwatar.abstractfactory; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; import org.junit.Test; -import com.iluwatar.abstractfactory.App; - -/** - * - * Application test - * - */ public class AppTest { + private App app = new App();; + private KingdomFactory elfFactory; + private KingdomFactory orcFactory; + + @Before + public void setUp() { + elfFactory = app.getElfKingdomFactory(); + orcFactory = app.getOrcKingdomFactory(); + } + @Test - public void test() { - String[] args = {}; - App.main(args); + public void king() { + final King elfKing = app.getKing(elfFactory); + assertTrue(elfKing instanceof ElfKing); + assertEquals(ElfKing.DESCRIPTION, elfKing.getDescription()); + final King orcKing = app.getKing(orcFactory); + assertTrue(orcKing instanceof OrcKing); + assertEquals(OrcKing.DESCRIPTION, orcKing.getDescription()); + } + + @Test + public void castle() { + final Castle elfCastle = app.getCastle(elfFactory); + assertTrue(elfCastle instanceof ElfCastle); + assertEquals(ElfCastle.DESCRIPTION, elfCastle.getDescription()); + final Castle orcCastle = app.getCastle(orcFactory); + assertTrue(orcCastle instanceof OrcCastle); + assertEquals(OrcCastle.DESCRIPTION, orcCastle.getDescription()); + } + + @Test + public void army() { + final Army elfArmy = app.getArmy(elfFactory); + assertTrue(elfArmy instanceof ElfArmy); + assertEquals(ElfArmy.DESCRIPTION, elfArmy.getDescription()); + final Army orcArmy = app.getArmy(orcFactory); + assertTrue(orcArmy instanceof OrcArmy); + assertEquals(OrcArmy.DESCRIPTION, orcArmy.getDescription()); + } + + @Test + public void createElfKingdom() { + app.createKingdom(elfFactory); + final King king = app.getKing(); + final Castle castle = app.getCastle(); + final Army army = app.getArmy(); + assertTrue(king instanceof ElfKing); + assertEquals(ElfKing.DESCRIPTION, king.getDescription()); + assertTrue(castle instanceof ElfCastle); + assertEquals(ElfCastle.DESCRIPTION, castle.getDescription()); + assertTrue(army instanceof ElfArmy); + assertEquals(ElfArmy.DESCRIPTION, army.getDescription()); + } + + @Test + public void createOrcKingdom() { + app.createKingdom(orcFactory); + final King king = app.getKing(); + final Castle castle = app.getCastle(); + final Army army = app.getArmy(); + assertTrue(king instanceof OrcKing); + assertEquals(OrcKing.DESCRIPTION, king.getDescription()); + assertTrue(castle instanceof OrcCastle); + assertEquals(OrcCastle.DESCRIPTION, castle.getDescription()); + assertTrue(army instanceof OrcArmy); + assertEquals(OrcArmy.DESCRIPTION, army.getDescription()); } }