Skip to content

Commit eec41bb

Browse files
committed
step 2: Clean code (after applying abstract factory)
1 parent 763d62b commit eec41bb

15 files changed

Lines changed: 346 additions & 114 deletions
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.premaseem;
2+
3+
import com.premaseem.icecreams.IceCream;
4+
import com.premaseem.milkshake.MilkShake;
5+
6+
/*
7+
@author: Aseem Jain
8+
@title: Design Patterns with Java 9
9+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
10+
*/
11+
public abstract class AbstractIceCreamFactory {
12+
abstract IceCream createIceCream(String choice);
13+
abstract MilkShake createMilkShake(String choice);
14+
15+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.premaseem;
2+
3+
import com.premaseem.icecreams.ChocolateIceCream;
4+
import com.premaseem.icecreams.IceCream;
5+
import com.premaseem.icecreams.StrawberryIceCream;
6+
import com.premaseem.milkshake.ChocolateMilkShake;
7+
import com.premaseem.milkshake.MilkShake;
8+
import com.premaseem.milkshake.StrawberryMilkShake;
9+
10+
/*
11+
@author: Aseem Jain
12+
@title: Design Patterns with Java 9
13+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
14+
*/
15+
16+
/**
17+
* This factory creates all daily products of Amul Brand
18+
*/
19+
public class AmulIceCreamFactory extends AbstractIceCreamFactory{
20+
21+
@Override
22+
public IceCream createIceCream(String iceCreamChoice){
23+
IceCream iceCream = null;
24+
25+
if (iceCreamChoice.equalsIgnoreCase("Strawberry")){
26+
iceCream = new StrawberryIceCream("Amul",2,120);
27+
28+
}else if (iceCreamChoice.equalsIgnoreCase("Chocolate")){
29+
iceCream = new ChocolateIceCream("Amul",2,250);
30+
}
31+
32+
return iceCream;
33+
}
34+
35+
@Override
36+
MilkShake createMilkShake (String choice) {
37+
MilkShake milkShake = null;
38+
39+
if (choice.equalsIgnoreCase("Strawberry")){
40+
milkShake = new StrawberryMilkShake("Amul",2);
41+
42+
}else if (choice.equalsIgnoreCase("Chocolate")){
43+
milkShake = new ChocolateMilkShake("Amul",2);
44+
}
45+
return milkShake;
46+
}
47+
}

pattern/src/com/premaseem/Client.java

Lines changed: 59 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,69 +4,83 @@
44
@author: Aseem Jain
55
@title: Design Patterns with Java 9
66
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
7-
@copyright: 2018 Packt Publication
87
*/
98

10-
import com.premaseem.icecreams.AmulChocolateIceCream;
11-
import com.premaseem.icecreams.AmulStrawberryIceCream;
12-
import com.premaseem.icecreams.DairyQueenChocolateIceCream;
13-
import com.premaseem.icecreams.DairyQueenStrawberryIceCream;
9+
import com.premaseem.icecreams.IceCream;
10+
import com.premaseem.milkshake.MilkShake;
1411

1512
import java.util.Scanner;
1613

1714
public class Client {
1815
public static void main (String[] args) {
1916
Scanner scan = new Scanner(System.in);
2017
System.out.println("Ice cream Abstract factory example ");
21-
System.out.println("Please enter the Brand of Ice cream ... ");
22-
System.out.println("Dairy Queen");
23-
System.out.println("Amul");
24-
String iceCreamBrand = scan.next();
18+
19+
20+
System.out.println("What you would like to order ... ");
21+
System.out.println("Icecream");
22+
System.out.println("Milkshake");
23+
String choice = scan.next();
2524

2625
System.out.println("Please enter your ice cream flavor ... ");
2726
System.out.println("Strawberry");
2827
System.out.println("Chocolate");
29-
String iceCreamChoice = scan.next();
30-
31-
32-
// Family of similar products with different brands. ( Tight couple)
33-
DairyQueenStrawberryIceCream dairyQueenStrawberryIceCream =null;
34-
DairyQueenChocolateIceCream dairyQueenChocolateIceCream = null;
35-
AmulStrawberryIceCream amulStrawberryIceCream =null;
36-
AmulChocolateIceCream amulchocolateIceCream = null;
37-
38-
// Sphegati code with if else ladder
39-
if (iceCreamBrand.equalsIgnoreCase("Amul")
40-
&& iceCreamChoice.equalsIgnoreCase("Strawberry")){
41-
amulStrawberryIceCream = new AmulStrawberryIceCream();
28+
String flavor = scan.next();
4229

43-
}else if (iceCreamBrand.equalsIgnoreCase("Amul") &&
44-
iceCreamChoice.equalsIgnoreCase("Chocolate")){
45-
amulchocolateIceCream = new AmulChocolateIceCream();
30+
System.out.println("Please enter the Brand of Ice cream ... ");
31+
System.out.println("Dairy Queen");
32+
System.out.println("Amul");
33+
String brand = scan.next();
4634

47-
}else if (iceCreamBrand.equalsIgnoreCase("Dairy Queen")
48-
&& iceCreamChoice.equalsIgnoreCase("Strawberry")){
49-
dairyQueenStrawberryIceCream = new DairyQueenStrawberryIceCream();
35+
AbstractIceCreamFactory factory = FactoryCreator.getFactory(brand);
5036

51-
}else if (iceCreamBrand.equalsIgnoreCase("Dairy Queen") &&
52-
iceCreamChoice.equalsIgnoreCase("Chocolate")){
53-
dairyQueenChocolateIceCream = new DairyQueenChocolateIceCream();
37+
// Virtual constructor ( takes care of configuration )
38+
if ( choice.equalsIgnoreCase("icecream")) {
39+
IceCream iceCream = factory.createIceCream(flavor);
40+
System.out.println(iceCream);
41+
}else {
42+
MilkShake milkShake = factory.createMilkShake(flavor);
43+
System.out.println(milkShake);
5444
}
5545

56-
// Ice cream of your choice is :
57-
System.out.print("Ice cream of your choice is ");
58-
if (amulStrawberryIceCream != null){
59-
System.out.println(amulStrawberryIceCream);
60-
}
61-
if (amulchocolateIceCream != null){
62-
System.out.println(amulchocolateIceCream);
63-
}
64-
if (dairyQueenStrawberryIceCream != null){
65-
System.out.println(dairyQueenStrawberryIceCream);
66-
}
67-
if (dairyQueenChocolateIceCream != null){
68-
System.out.println(dairyQueenChocolateIceCream);
69-
}
46+
// Family of similar products with different brands. ( Tight couple)
47+
// DairyQueenStrawberryIceCream dairyQueenStrawberryIceCream =null;
48+
// DairyQueenChocolateIceCream dairyQueenChocolateIceCream = null;
49+
// AmulStrawberryIceCream amulStrawberryIceCream =null;
50+
// AmulChocolateIceCream amulchocolateIceCream = null;
51+
52+
// // Sphegati code with if else ladder
53+
// if (iceCreamBrand.equalsIgnoreCase("Amul")
54+
// && iceCreamChoice.equalsIgnoreCase("Strawberry")){
55+
// amulStrawberryIceCream = new AmulStrawberryIceCream();
56+
//
57+
// }else if (iceCreamBrand.equalsIgnoreCase("Amul") &&
58+
// iceCreamChoice.equalsIgnoreCase("Chocolate")){
59+
// amulchocolateIceCream = new AmulChocolateIceCream();
60+
//
61+
// }else if (iceCreamBrand.equalsIgnoreCase("Dairy Queen")
62+
// && iceCreamChoice.equalsIgnoreCase("Strawberry")){
63+
// dairyQueenStrawberryIceCream = new DairyQueenStrawberryIceCream();
64+
//
65+
// }else if (iceCreamBrand.equalsIgnoreCase("Dairy Queen") &&
66+
// iceCreamChoice.equalsIgnoreCase("Chocolate")){
67+
// dairyQueenChocolateIceCream = new DairyQueenChocolateIceCream();
68+
// }
69+
//
70+
// // Ice cream of your choice is :
71+
// System.out.print("Ice cream of your choice is ");
72+
// if (amulStrawberryIceCream != null){
73+
// System.out.println(amulStrawberryIceCream);
74+
// }
75+
// if (amulchocolateIceCream != null){
76+
// System.out.println(amulchocolateIceCream);
77+
// }
78+
// if (dairyQueenStrawberryIceCream != null){
79+
// System.out.println(dairyQueenStrawberryIceCream);
80+
// }
81+
// if (dairyQueenChocolateIceCream != null){
82+
// System.out.println(dairyQueenChocolateIceCream);
83+
// }
7084

7185
}
7286
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.premaseem;
2+
3+
import com.premaseem.icecreams.ChocolateIceCream;
4+
import com.premaseem.icecreams.IceCream;
5+
import com.premaseem.icecreams.StrawberryIceCream;
6+
import com.premaseem.milkshake.ChocolateMilkShake;
7+
import com.premaseem.milkshake.MilkShake;
8+
import com.premaseem.milkshake.StrawberryMilkShake;
9+
10+
/*
11+
@author: Aseem Jain
12+
@title: Design Patterns with Java 9
13+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
14+
*/
15+
16+
/**
17+
* This factory creates all daily products of Dairy Queen Brand
18+
*/
19+
public class DairyQueenCreamFactory extends AbstractIceCreamFactory{
20+
21+
@Override
22+
public IceCream createIceCream(String iceCreamChoice){
23+
IceCream iceCream = null;
24+
25+
if (iceCreamChoice.equalsIgnoreCase("Strawberry")){
26+
iceCream = new StrawberryIceCream("Dairy Queen",2,120);
27+
28+
}else if (iceCreamChoice.equalsIgnoreCase("Chocolate")){
29+
iceCream = new ChocolateIceCream("Dairy Queen",2,250);
30+
}
31+
32+
return iceCream;
33+
}
34+
35+
@Override
36+
MilkShake createMilkShake (String choice) {
37+
MilkShake milkShake = null;
38+
39+
if (choice.equalsIgnoreCase("Strawberry")){
40+
milkShake = new StrawberryMilkShake("Dairy Queen",2);
41+
42+
}else if (choice.equalsIgnoreCase("Chocolate")){
43+
milkShake = new ChocolateMilkShake("Dairy Queen",2);
44+
}
45+
return milkShake;
46+
}
47+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.premaseem;
2+
3+
/*
4+
@author: Aseem Jain
5+
@title: Design Patterns with Java 9
6+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
7+
*/
8+
public class FactoryCreator {
9+
static AbstractIceCreamFactory getFactory (String brand) {
10+
if (brand.equalsIgnoreCase("Amul")){
11+
return new AmulIceCreamFactory();
12+
}else {
13+
return new DairyQueenCreamFactory();
14+
}
15+
}
16+
}

pattern/src/com/premaseem/icecreams/AmulChocolateIceCream.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

pattern/src/com/premaseem/icecreams/AmulStrawberryIceCream.java

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.premaseem.icecreams;
2+
3+
/*
4+
@author: Aseem Jain
5+
@title: Design Patterns with Java 9
6+
@link: https://premaseem.wordpress.com/category/computers/design-patterns/
7+
*/
8+
public class ChocolateIceCream implements IceCream {
9+
10+
public ChocolateIceCream (String brand,Integer cost, Integer calories){
11+
this.brand = brand;
12+
this.cost =cost;
13+
this.calories =calories;
14+
}
15+
16+
String brand = "";
17+
Integer cost = 0;
18+
Integer calories = 0;
19+
20+
21+
@Override
22+
public Integer getCalories () {
23+
return calories;
24+
}
25+
26+
@Override
27+
public Integer getCost () {
28+
return cost;
29+
}
30+
31+
@Override
32+
public String getBrand () {
33+
return brand;
34+
}
35+
36+
public String toString () {
37+
return this.getClass().getSimpleName() + "of Brand " + brand +
38+
" with Calories: " + getCalories() + " and cost: $" + getCost();
39+
}
40+
}

pattern/src/com/premaseem/icecreams/DairyQueenChocolateIceCream.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

pattern/src/com/premaseem/icecreams/DairyQueenStrawberryIceCream.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)