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; + } +}