From 72268f67e003b4ae39249de72ce3701a2ccd3fae Mon Sep 17 00:00:00 2001 From: Aseem Jain Date: Tue, 13 Mar 2018 16:31:14 -0500 Subject: [PATCH] Visitor Design Pattern - Visitor Cook party project Cook visits at party location for cooking --- pattern/src/com/premaseem/Client.java | 13 ---- patternBonus/src/com/premaseem/Client.java | 13 ---- .../src/com/premaseem/ClientFile.java | 60 +++++++++++++++++++ .../src/com/premaseem/CookVisitorI.java | 44 ++++++++++++++ patternBonus/src/com/premaseem/Party.java | 46 ++++++++++++++ 5 files changed, 150 insertions(+), 26 deletions(-) delete mode 100644 pattern/src/com/premaseem/Client.java delete mode 100644 patternBonus/src/com/premaseem/Client.java create mode 100644 patternBonus/src/com/premaseem/ClientFile.java create mode 100644 patternBonus/src/com/premaseem/CookVisitorI.java create mode 100644 patternBonus/src/com/premaseem/Party.java diff --git a/pattern/src/com/premaseem/Client.java b/pattern/src/com/premaseem/Client.java deleted file mode 100644 index 15f05df..0000000 --- a/pattern/src/com/premaseem/Client.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.premaseem; - -/* -@author: Aseem Jain -@title: Design Patterns with Java 9 -@link: https://premaseem.wordpress.com/category/computers/design-patterns/ -@copyright: 2018 Packt Publication -*/ -public class Client { - public static void main (String[] args) { - System.out.println("Singleton cook example "); - } -} diff --git a/patternBonus/src/com/premaseem/Client.java b/patternBonus/src/com/premaseem/Client.java deleted file mode 100644 index 15f05df..0000000 --- a/patternBonus/src/com/premaseem/Client.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.premaseem; - -/* -@author: Aseem Jain -@title: Design Patterns with Java 9 -@link: https://premaseem.wordpress.com/category/computers/design-patterns/ -@copyright: 2018 Packt Publication -*/ -public class Client { - public static void main (String[] args) { - System.out.println("Singleton cook example "); - } -} diff --git a/patternBonus/src/com/premaseem/ClientFile.java b/patternBonus/src/com/premaseem/ClientFile.java new file mode 100644 index 0000000..3d12df5 --- /dev/null +++ b/patternBonus/src/com/premaseem/ClientFile.java @@ -0,0 +1,60 @@ +package com.premaseem; + +import java.util.Scanner; + +public class ClientFile { + + public static void main(String[] args) { + + System.out.println("Welcome to Party host example which uses visitor pattern "); + Scanner scan = new Scanner(System.in); + Party party; + CookVisitorI visitorCook; + int repeatRunFlag = 1; + while (repeatRunFlag == 1) { + System.out.println("Which party do you want to host "); + System.out.println("press 1 for Week end party "); + System.out.println("press 2 for Week day party "); + int tvType = scan.nextInt(); + if (tvType == 1) { + party = new LoudParty(); + } else { + party = new CalmParty(); + } + + System.out.println("How would you want to manage cooking of food "); + System.out.println(" Press 1 for a visitor Veg Cook "); + System.out.println(" Press 2 for a visitor Non- Veg Cook "); + System.out.println(" Press 3 for in house cooking (no visitor) "); + + int type = scan.nextInt(); + try { + switch (type) { + case 1: + visitorCook = new VegCookVisitor(); + party.accept(visitorCook); + break; + case 2: + visitorCook = new NonVegCookVisitor(); + party.accept(visitorCook); + break; + case 3: + party.cookInHouse(); + break; + } + + + } catch (Exception e1) { + e1.printStackTrace(); + } + System.out.println("============================="); + System.out.println("Press 1 to Repeat .... "); + try { + repeatRunFlag = scan.nextInt(); + } catch (Exception e) { + repeatRunFlag = 0; + } + + } + } +} diff --git a/patternBonus/src/com/premaseem/CookVisitorI.java b/patternBonus/src/com/premaseem/CookVisitorI.java new file mode 100644 index 0000000..25264e0 --- /dev/null +++ b/patternBonus/src/com/premaseem/CookVisitorI.java @@ -0,0 +1,44 @@ +package com.premaseem; + +public interface CookVisitorI { + void cook (LoudParty loudParty); + void cook (CalmParty calmParty); +} + +class VegCookVisitor implements CookVisitorI{ + + @Override + public void cook(LoudParty loudParty) { + loudParty.meal = "Spicy Vegetables"; + loudParty.drink = "Fruit Beer"; + loudParty.music = "Loud music"; + loudParty.getPartyDetail(); + } + + @Override + public void cook(CalmParty calmParty) { + calmParty.meal = "Boiled Vegetables"; + calmParty.drink = "Fruit Juice"; + calmParty.music = "Meditation Music"; + calmParty.getPartyDetail(); + } +} + +class NonVegCookVisitor implements CookVisitorI{ + + @Override + public void cook(LoudParty loudParty) { + loudParty.meal = "Spicy chicken"; + loudParty.drink = "Beer"; + loudParty.music = "High Beat music"; + loudParty.getPartyDetail(); + } + + @Override + public void cook(CalmParty calmParty) { + calmParty.meal = "Non spicy chicken"; + calmParty.drink = "Fruit Beer"; + calmParty.music = "Meditation music"; + calmParty.getPartyDetail(); + } +} \ No newline at end of file diff --git a/patternBonus/src/com/premaseem/Party.java b/patternBonus/src/com/premaseem/Party.java new file mode 100644 index 0000000..698f8fa --- /dev/null +++ b/patternBonus/src/com/premaseem/Party.java @@ -0,0 +1,46 @@ +package com.premaseem; + +public abstract class Party { + + String music = " No Music"; + String meal = " empty"; + String drink = "plane water "; + CookVisitorI visitor = null; + + abstract void accept(CookVisitorI visitor); + + + String getPartyDetail() { + String detials = visitor!= null ?visitor.getClass().getSimpleName() : "in house cooking" + " organized " + this.getClass().getSimpleName() + " has Music : " + music + " with Drink :" + + drink + " & Meal : " + meal; + System.out.println(detials); + return detials; + } + + public void cookInHouse() { + meal = "Spicy Vegetables"; + drink = "in house drink"; + music = "DJ music"; + getPartyDetail(); + } + +} + +class LoudParty extends Party { + + @Override + void accept(CookVisitorI visitor) { + this.visitor = visitor; + visitor.cook(this); + } +} + +class CalmParty extends Party { + + @Override + void accept(CookVisitorI visitor) { + this.visitor = visitor; + visitor.cook(this); + } +} +