diff --git a/servant/pom.xml b/servant/pom.xml
new file mode 100644
index 000000000..b52d0277f
--- /dev/null
+++ b/servant/pom.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+ com.iluwatar
+ java-design-patterns
+ 1.0-SNAPSHOT
+
+ com.iluwatar
+ servant
+ 1.0-SNAPSHOT
+ servant
+ http://maven.apache.org
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
diff --git a/servant/src/main/java/com/iluwatar/App.java b/servant/src/main/java/com/iluwatar/App.java
new file mode 100644
index 000000000..7a82abb47
--- /dev/null
+++ b/servant/src/main/java/com/iluwatar/App.java
@@ -0,0 +1,51 @@
+package com.iluwatar;
+
+import java.util.ArrayList;
+
+
+/**
+ * Servant offers some functionality to a group of classes without defining that functionality in each of them.
+ * A Servant is a class whose instance provides methods that take care of a desired service,
+ * while objects for which the servant does something, are taken as parameters.
+ *
+ */
+public class App {
+ static Servant jenkins = new Servant("Jenkins");
+ static Servant travis = new Servant("Travis");
+
+ public static void main( String[] args ){
+ scenario(jenkins, 1);
+ scenario(travis, 0);
+ }
+
+
+ public static void scenario(Servant servant, int compliment){
+ King k = new King();
+ Queen q = new Queen();
+
+ ArrayList guests = new ArrayList<>();
+ guests.add(k);
+ guests.add(q);
+
+ //feed
+ servant.feed(k);
+ servant.feed(q);
+ //serve drinks
+ servant.giveWine(k);
+ servant.giveWine(q);
+ //compliment
+ servant.GiveCompliments( guests.get(compliment) );
+
+ //outcome of the night
+ for(Royalty r : guests)
+ r.changeMood();
+
+ //check your luck
+ if( servant.checkIfYouWillBeHanged(guests) )
+ System.out.println(servant.name + " will live another day");
+ else
+ System.out.println("Poor " + servant.name + ". His days are numbered");
+ }
+
+
+}
diff --git a/servant/src/main/java/com/iluwatar/King.java b/servant/src/main/java/com/iluwatar/King.java
new file mode 100644
index 000000000..c101a334b
--- /dev/null
+++ b/servant/src/main/java/com/iluwatar/King.java
@@ -0,0 +1,31 @@
+package com.iluwatar;
+
+public class King implements Royalty{
+ private boolean isDrunk = false, isHungry = true, isHappy = false;
+ private boolean complimentReceived = false;
+
+ @Override
+ public void feed() {
+ isHungry = false;
+ }
+
+ @Override
+ public void giveDrink() {
+ isDrunk = true;
+ }
+
+ public void receiveCompliments(){
+ complimentReceived = true;
+ }
+
+ @Override
+ public void changeMood() {
+ if(!isHungry && isDrunk) isHappy = true;
+ if( complimentReceived ) isHappy = false;
+ }
+
+ @Override
+ public boolean getMood() {
+ return isHappy;
+ }
+}
diff --git a/servant/src/main/java/com/iluwatar/Queen.java b/servant/src/main/java/com/iluwatar/Queen.java
new file mode 100644
index 000000000..61c16626c
--- /dev/null
+++ b/servant/src/main/java/com/iluwatar/Queen.java
@@ -0,0 +1,35 @@
+package com.iluwatar;
+
+public class Queen implements Royalty{
+ private boolean isDrunk = true, isHungry = false, isHappy = false;
+ private boolean isFlirty = true, complimentReceived = false;
+
+ @Override
+ public void feed() {
+ isHungry = false;
+ }
+
+ @Override
+ public void giveDrink() {
+ isDrunk = true;
+ }
+
+ public void receiveCompliments(){
+ complimentReceived = true;
+ }
+
+ @Override
+ public void changeMood() {
+ if( complimentReceived && isFlirty && isDrunk ) isHappy = true;
+ }
+
+ @Override
+ public boolean getMood() {
+ return isHappy;
+ }
+
+ public void setFlirtiness(boolean f){
+ this.isFlirty = f;
+ }
+
+}
diff --git a/servant/src/main/java/com/iluwatar/Royalty.java b/servant/src/main/java/com/iluwatar/Royalty.java
new file mode 100644
index 000000000..f4dcaf0fc
--- /dev/null
+++ b/servant/src/main/java/com/iluwatar/Royalty.java
@@ -0,0 +1,9 @@
+package com.iluwatar;
+
+interface Royalty {
+ public void feed();
+ public void giveDrink();
+ public void changeMood();
+ public void receiveCompliments();
+ public boolean getMood();
+}
diff --git a/servant/src/main/java/com/iluwatar/Servant.java b/servant/src/main/java/com/iluwatar/Servant.java
new file mode 100644
index 000000000..ec0cc1c37
--- /dev/null
+++ b/servant/src/main/java/com/iluwatar/Servant.java
@@ -0,0 +1,31 @@
+package com.iluwatar;
+
+import java.util.ArrayList;
+
+public class Servant {
+ public String name;
+
+ public Servant(String name){
+ this.name = name;
+ }
+
+ public void feed(Royalty r){
+ r.feed();
+ }
+
+ public void giveWine(Royalty r){
+ r.giveDrink();
+ }
+
+ public void GiveCompliments(Royalty r){
+ r.receiveCompliments();
+ }
+
+ public boolean checkIfYouWillBeHanged(ArrayList tableGuests){
+ boolean anotherDay = true;
+ for( Royalty r : tableGuests )
+ if( !r.getMood() ) anotherDay = false;
+
+ return anotherDay;
+ }
+}