diff --git a/abstract-factory/pom.xml b/abstract-factory/pom.xml
new file mode 100644
index 000000000..460d3a09c
--- /dev/null
+++ b/abstract-factory/pom.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+ com.iluwatar
+ java-design-patterns
+ 1.0-SNAPSHOT
+
+ com.iluwatar
+ abstract-factory
+ 1.0-SNAPSHOT
+ abstract-factory
+ http://maven.apache.org
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
diff --git a/abstract-factory/src/main/java/com/iluwatar/App.java b/abstract-factory/src/main/java/com/iluwatar/App.java
new file mode 100644
index 000000000..de3f1a145
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/App.java
@@ -0,0 +1,20 @@
+package com.iluwatar;
+
+public class App
+{
+ public static void main( String[] args )
+ {
+ createKingdom(new ElfKingdomFactory());
+ createKingdom(new OrcKingdomFactory());
+ }
+
+ 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);
+ }
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/Army.java b/abstract-factory/src/main/java/com/iluwatar/Army.java
new file mode 100644
index 000000000..0365fad96
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/Army.java
@@ -0,0 +1,5 @@
+package com.iluwatar;
+
+public interface Army {
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/Castle.java b/abstract-factory/src/main/java/com/iluwatar/Castle.java
new file mode 100644
index 000000000..4cc765bee
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/Castle.java
@@ -0,0 +1,5 @@
+package com.iluwatar;
+
+public interface Castle {
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/ElfArmy.java b/abstract-factory/src/main/java/com/iluwatar/ElfArmy.java
new file mode 100644
index 000000000..1df451c9c
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/ElfArmy.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class ElfArmy implements Army {
+
+ @Override
+ public String toString() {
+ return "This is the Elven Army!";
+ }
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/ElfCastle.java b/abstract-factory/src/main/java/com/iluwatar/ElfCastle.java
new file mode 100644
index 000000000..deaf6a58d
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/ElfCastle.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class ElfCastle implements Castle {
+
+ @Override
+ public String toString() {
+ return "This is the Elven castle!";
+ }
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/ElfKing.java b/abstract-factory/src/main/java/com/iluwatar/ElfKing.java
new file mode 100644
index 000000000..36e51119a
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/ElfKing.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class ElfKing implements King {
+
+ @Override
+ public String toString() {
+ return "This is the Elven king!";
+ }
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/ElfKingdomFactory.java b/abstract-factory/src/main/java/com/iluwatar/ElfKingdomFactory.java
new file mode 100644
index 000000000..1bcd0a2d5
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/ElfKingdomFactory.java
@@ -0,0 +1,17 @@
+package com.iluwatar;
+
+public class ElfKingdomFactory implements KingdomFactory {
+
+ public Castle createCastle() {
+ return new ElfCastle();
+ }
+
+ public King createKing() {
+ return new ElfKing();
+ }
+
+ public Army createArmy() {
+ return new ElfArmy();
+ }
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/King.java b/abstract-factory/src/main/java/com/iluwatar/King.java
new file mode 100644
index 000000000..2a63cb3b1
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/King.java
@@ -0,0 +1,5 @@
+package com.iluwatar;
+
+public interface King {
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/KingdomFactory.java b/abstract-factory/src/main/java/com/iluwatar/KingdomFactory.java
new file mode 100644
index 000000000..db3f9f869
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/KingdomFactory.java
@@ -0,0 +1,9 @@
+package com.iluwatar;
+
+public interface KingdomFactory {
+
+ Castle createCastle();
+ King createKing();
+ Army createArmy();
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/OrcArmy.java b/abstract-factory/src/main/java/com/iluwatar/OrcArmy.java
new file mode 100644
index 000000000..d4e2515f6
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/OrcArmy.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class OrcArmy implements Army {
+
+ @Override
+ public String toString() {
+ return "This is the Orcish Army!";
+ }
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/OrcCastle.java b/abstract-factory/src/main/java/com/iluwatar/OrcCastle.java
new file mode 100644
index 000000000..daa49f43f
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/OrcCastle.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class OrcCastle implements Castle {
+
+ @Override
+ public String toString() {
+ return "This is the Orcish castle!";
+ }
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/OrcKing.java b/abstract-factory/src/main/java/com/iluwatar/OrcKing.java
new file mode 100644
index 000000000..b6ba989d7
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/OrcKing.java
@@ -0,0 +1,10 @@
+package com.iluwatar;
+
+public class OrcKing implements King {
+
+ @Override
+ public String toString() {
+ return "This is the Orc king!";
+ }
+
+}
diff --git a/abstract-factory/src/main/java/com/iluwatar/OrcKingdomFactory.java b/abstract-factory/src/main/java/com/iluwatar/OrcKingdomFactory.java
new file mode 100644
index 000000000..161f001a2
--- /dev/null
+++ b/abstract-factory/src/main/java/com/iluwatar/OrcKingdomFactory.java
@@ -0,0 +1,17 @@
+package com.iluwatar;
+
+public class OrcKingdomFactory implements KingdomFactory {
+
+ public Castle createCastle() {
+ return new OrcCastle();
+ }
+
+ public King createKing() {
+ return new OrcKing();
+ }
+
+ public Army createArmy() {
+ return new OrcArmy();
+ }
+
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 000000000..fd2984763
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+ com.iluwatar
+ java-design-patterns
+ 1.0-SNAPSHOT
+ pom
+
+
+
+ website
+ scp://webhost.company.com/www/website
+
+
+
+
+ UTF-8
+
+
+ abstract-factory
+
+
\ No newline at end of file