diff --git a/object-mother/README.md b/object-mother/README.md
new file mode 100644
index 000000000..9188c8b41
--- /dev/null
+++ b/object-mother/README.md
@@ -0,0 +1,31 @@
+---
+layout: pattern
+title: Object Mother
+folder: object-mother
+permalink: /patterns/object-mother/
+pumlid:
+categories: Creational
+tags:
+ - Java
+ - Difficulty-Beginner
+---
+
+## Object Mother
+Define a factory of immutable content with separated builder and factory interfaces.
+
+
+
+## Applicability
+Use the Object Mother pattern when
+
+* You want consistent objects over several tests
+* you want to reduce code for creation of objects in tests
+* every test should run with fresh data
+
+## Credits
+
+* [Answer by David Brown](http://stackoverflow.com/questions/923319/what-is-an-objectmother) to the stackoverflow question: [What is an ObjectMother?](http://stackoverflow.com/questions/923319/what-is-an-objectmother)
+
+* [c2wiki - Object Mother](http://c2.com/cgi/wiki?ObjectMother)
+
+* [Nat Pryce - Test Data Builders: an alternative to the Object Mother pattern](http://www.natpryce.com/articles/000714.html)
\ No newline at end of file
diff --git a/object-mother/etc/object-mother.png b/object-mother/etc/object-mother.png
new file mode 100644
index 000000000..807343d9f
Binary files /dev/null and b/object-mother/etc/object-mother.png differ
diff --git a/object-mother/etc/object-mother.ucls b/object-mother/etc/object-mother.ucls
new file mode 100644
index 000000000..ef6cee5ef
--- /dev/null
+++ b/object-mother/etc/object-mother.ucls
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/object-mother/pom.xml b/object-mother/pom.xml
new file mode 100644
index 000000000..91bdff8e2
--- /dev/null
+++ b/object-mother/pom.xml
@@ -0,0 +1,48 @@
+
+
+
+ 4.0.0
+
+ com.iluwatar
+ java-design-patterns
+ 1.14.0-SNAPSHOT
+
+ object-mother
+
+
+ junit
+ junit
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+
\ No newline at end of file
diff --git a/object-mother/src/main/java/com/iluwatar/objectmother/King.java b/object-mother/src/main/java/com/iluwatar/objectmother/King.java
new file mode 100644
index 000000000..544b0bacb
--- /dev/null
+++ b/object-mother/src/main/java/com/iluwatar/objectmother/King.java
@@ -0,0 +1,66 @@
+/**
+ * The MIT License
+ * Copyright (c) 2016 Ilkka Seppälä
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package com.iluwatar.objectmother;
+
+public class King implements Royalty {
+ boolean isDrunk = false;
+ boolean isHappy = false;
+
+ @Override
+ public void makeDrunk() {
+ isDrunk = true;
+ }
+
+ @Override
+ public void makeSober() {
+ isDrunk = false;
+ }
+
+ @Override
+ public void makeHappy() {
+ isHappy = true;
+ }
+
+ @Override
+ public void makeUnhappy() {
+ isHappy = false;
+ }
+
+ public boolean isHappy() {
+ return isHappy;
+ }
+
+ /**
+ * Method to flirt to a queen.
+ * @param queen Queen which should be flirted.
+ */
+ public void flirt(Queen queen) {
+ boolean flirtStatus = queen.getFlirted(this);
+ if (flirtStatus == false) {
+ this.makeUnhappy();
+ } else {
+ this.makeHappy();
+ }
+
+ }
+}
diff --git a/object-mother/src/main/java/com/iluwatar/objectmother/Queen.java b/object-mother/src/main/java/com/iluwatar/objectmother/Queen.java
new file mode 100644
index 000000000..3e18fbf3a
--- /dev/null
+++ b/object-mother/src/main/java/com/iluwatar/objectmother/Queen.java
@@ -0,0 +1,69 @@
+/**
+ * The MIT License
+ * Copyright (c) 2016 Ilkka Seppälä
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package com.iluwatar.objectmother;
+
+public class Queen implements Royalty {
+ private boolean isDrunk = false;
+ private boolean isHappy = false;
+ private boolean isFlirty = false;
+
+ @Override
+ public void makeDrunk() {
+ isDrunk = true;
+ }
+
+ @Override
+ public void makeSober() {
+ isDrunk = false;
+ }
+
+ @Override
+ public void makeHappy() {
+ isHappy = true;
+ }
+
+ @Override
+ public void makeUnhappy() {
+ isHappy = false;
+ }
+
+ public boolean isFlirty() {
+ return isFlirty;
+ }
+
+ public void setFlirtiness(boolean flirtiness) {
+ this.isFlirty = flirtiness;
+ }
+
+ /**
+ * Method which is called when the king is flirting to a queen.
+ * @param king King who initialized the flirt.
+ * @return A value which describes if the flirt was successful or not.
+ */
+ public boolean getFlirted(King king) {
+ if (this.isFlirty && king.isHappy && !king.isDrunk) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/object-mother/src/main/java/com/iluwatar/objectmother/Royalty.java b/object-mother/src/main/java/com/iluwatar/objectmother/Royalty.java
new file mode 100644
index 000000000..2bebc0939
--- /dev/null
+++ b/object-mother/src/main/java/com/iluwatar/objectmother/Royalty.java
@@ -0,0 +1,33 @@
+/**
+ * The MIT License
+ * Copyright (c) 2016 Ilkka Seppälä
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package com.iluwatar.objectmother;
+
+public interface Royalty {
+ void makeDrunk();
+
+ void makeSober();
+
+ void makeHappy();
+
+ void makeUnhappy();
+}
diff --git a/object-mother/src/main/java/com/iluwatar/objectmother/RoyaltyObjectMother.java b/object-mother/src/main/java/com/iluwatar/objectmother/RoyaltyObjectMother.java
new file mode 100644
index 000000000..624a29132
--- /dev/null
+++ b/object-mother/src/main/java/com/iluwatar/objectmother/RoyaltyObjectMother.java
@@ -0,0 +1,83 @@
+/**
+ * The MIT License
+ * Copyright (c) 2016 Ilkka Seppälä
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package com.iluwatar.objectmother;
+
+public final class RoyaltyObjectMother {
+
+ /**
+ * Method to create a sober and unhappy king. The standard paramters are set.
+ * @return An instance of {@link com.iluwatar.objectmother.King} with the standard properties.
+ */
+ public static King createSoberUnhappyKing() {
+ return new King();
+ }
+
+ /**
+ * Method of the object mother to create a drunk king.
+ * @return A drunk {@link com.iluwatar.objectmother.King}.
+ */
+ public static King createDrunkKing() {
+ King king = new King();
+ king.makeDrunk();
+ return king;
+ }
+
+ /**
+ * Method to create a happy king.
+ * @return A happy {@link com.iluwatar.objectmother.King}.
+ */
+ public static King createHappyKing() {
+ King king = new King();
+ king.makeHappy();
+ return king;
+ }
+
+ /**
+ * Method to create a happy and drunk king.
+ * @return A drunk and happy {@link com.iluwatar.objectmother.King}.
+ */
+ public static King createHappyDrunkKing() {
+ King king = new King();
+ king.makeHappy();
+ king.makeDrunk();
+ return king;
+ }
+
+ /**
+ * Method to create a flirty queen.
+ * @return A flirty {@link com.iluwatar.objectmother.Queen}.
+ */
+ public static Queen createFlirtyQueen() {
+ Queen queen = new Queen();
+ queen.setFlirtiness(true);
+ return queen;
+ }
+
+ /**
+ * Method to create a not flirty queen.
+ * @return A not flirty {@link com.iluwatar.objectmother.Queen}.
+ */
+ public static Queen createNotFlirtyQueen() {
+ return new Queen();
+ }
+}
diff --git a/object-mother/src/test/java/com/iluwatar/objectmother/test/RoyaltyObjectMotherTest.java b/object-mother/src/test/java/com/iluwatar/objectmother/test/RoyaltyObjectMotherTest.java
new file mode 100644
index 000000000..feba71a1b
--- /dev/null
+++ b/object-mother/src/test/java/com/iluwatar/objectmother/test/RoyaltyObjectMotherTest.java
@@ -0,0 +1,89 @@
+/**
+ * The MIT License
+ * Copyright (c) 2016 Ilkka Seppälä
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package com.iluwatar.objectmother.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.iluwatar.objectmother.King;
+import com.iluwatar.objectmother.Queen;
+import com.iluwatar.objectmother.Royalty;
+import com.iluwatar.objectmother.RoyaltyObjectMother;
+
+public class RoyaltyObjectMotherTest {
+
+ @Test
+ public void unsuccessfulKingFlirt() {
+ King soberUnhappyKing = RoyaltyObjectMother.createSoberUnhappyKing();
+ Queen flirtyQueen = RoyaltyObjectMother.createFlirtyQueen();
+ soberUnhappyKing.flirt(flirtyQueen);
+ assertFalse(soberUnhappyKing.isHappy());
+ }
+
+ @Test
+ public void queenIsBlockingFlirtCauseDrunkKing() {
+ King soberUnhappyKing = RoyaltyObjectMother.createDrunkKing();
+ Queen notFlirtyQueen = RoyaltyObjectMother.createNotFlirtyQueen();
+ soberUnhappyKing.flirt(notFlirtyQueen);
+ assertFalse(soberUnhappyKing.isHappy());
+ }
+
+ @Test
+ public void queenIsBlockingFlirt() {
+ King soberUnhappyKing = RoyaltyObjectMother.createHappyKing();
+ Queen notFlirtyQueen = RoyaltyObjectMother.createNotFlirtyQueen();
+ soberUnhappyKing.flirt(notFlirtyQueen);
+ assertFalse(soberUnhappyKing.isHappy());
+ }
+
+ @Test
+ public void successfullKingFlirt() {
+ King soberUnhappyKing = RoyaltyObjectMother.createHappyKing();
+ Queen flirtyQueen = RoyaltyObjectMother.createFlirtyQueen();
+ soberUnhappyKing.flirt(flirtyQueen);
+ assertTrue(soberUnhappyKing.isHappy());
+ }
+
+ @Test
+ public void testQueenType() {
+ Royalty flirtyQueen = RoyaltyObjectMother.createFlirtyQueen();
+ Royalty notFlirtyQueen = RoyaltyObjectMother.createNotFlirtyQueen();
+ assertEquals(flirtyQueen.getClass(), Queen.class);
+ assertEquals(notFlirtyQueen.getClass(), Queen.class);
+ }
+
+ @Test
+ public void testKingType() {
+ Royalty drunkKing = RoyaltyObjectMother.createDrunkKing();
+ Royalty happyDrunkKing = RoyaltyObjectMother.createHappyDrunkKing();
+ Royalty happyKing = RoyaltyObjectMother.createHappyKing();
+ Royalty soberUnhappyKing = RoyaltyObjectMother.createSoberUnhappyKing();
+ assertEquals(drunkKing.getClass(), King.class);
+ assertEquals(happyDrunkKing.getClass(), King.class);
+ assertEquals(happyKing.getClass(), King.class);
+ assertEquals(soberUnhappyKing.getClass(), King.class);
+ }
+}