File tree 8 files changed +138
-0
lines changed
RandomProblems/src/learnHeadFirstDesignPatterns/chapter_3_decorator_pattern
8 files changed +138
-0
lines changed Original file line number Diff line number Diff line change
1
+ package learnHeadFirstDesignPatterns .chapter_3_decorator_pattern ;
2
+
3
+ import lombok .Getter ;
4
+
5
+ public abstract class Beverage {
6
+ @ Getter
7
+ String description = "Unknown beverage" ;
8
+
9
+ public abstract double cost ();
10
+ }
Original file line number Diff line number Diff line change
1
+ package learnHeadFirstDesignPatterns .chapter_3_decorator_pattern ;
2
+
3
+ public abstract class CondimentDecorator extends Beverage {
4
+ public abstract String getDescription ();
5
+ }
Original file line number Diff line number Diff line change
1
+ package learnHeadFirstDesignPatterns .chapter_3_decorator_pattern ;
2
+
3
+ /**Classes should be open for extension and closed for modification.
4
+ *
5
+ * Decorator pattern: attach additional responsibilities to an object dynamically.*/
6
+ public class DecoratorPatternTestDrive {
7
+
8
+ public static void main (String ... args ){
9
+ System .out .println ("Program started." );
10
+ Beverage espresso = new Espresso ();
11
+ print (espresso );
12
+
13
+ Beverage houseBlend = new HouseBlend ();
14
+ houseBlend = new Mocha (houseBlend );
15
+ print (houseBlend );
16
+
17
+ houseBlend = new Soy (houseBlend );
18
+ print (houseBlend );
19
+
20
+ houseBlend = new Whip (houseBlend );
21
+ print (houseBlend );
22
+
23
+ System .out .println ("Program ended." );
24
+ }
25
+
26
+ /**
27
+ * @param beverage
28
+ */
29
+ protected static void print (Beverage beverage ) {
30
+ System .out .println (beverage .getDescription () + " $" + beverage .cost ());
31
+ }
32
+ }
Original file line number Diff line number Diff line change
1
+ package learnHeadFirstDesignPatterns .chapter_3_decorator_pattern ;
2
+
3
+ public class Espresso extends Beverage {
4
+
5
+ public Espresso () {
6
+ description = "Espresso" ;
7
+ }
8
+
9
+ @ Override
10
+ public double cost () {
11
+ return 1.99 ;
12
+ }
13
+
14
+ }
Original file line number Diff line number Diff line change
1
+ package learnHeadFirstDesignPatterns .chapter_3_decorator_pattern ;
2
+
3
+ public class HouseBlend extends Beverage {
4
+
5
+ public HouseBlend () {
6
+ description = "House Blend Coffee" ;
7
+ }
8
+
9
+ @ Override
10
+ public double cost () {
11
+ return .89 ;
12
+ }
13
+
14
+ }
Original file line number Diff line number Diff line change
1
+ package learnHeadFirstDesignPatterns .chapter_3_decorator_pattern ;
2
+
3
+ public class Mocha extends CondimentDecorator {
4
+
5
+ Beverage beverage ;
6
+
7
+ public Mocha (Beverage beverage ){
8
+ this .beverage = beverage ;
9
+ }
10
+
11
+ @ Override
12
+ public String getDescription () {
13
+ return beverage .getDescription () + ", Mocha" ;
14
+ }
15
+
16
+ @ Override
17
+ public double cost () {
18
+ return .20 + beverage .cost ();
19
+ }
20
+
21
+ }
Original file line number Diff line number Diff line change
1
+ package learnHeadFirstDesignPatterns .chapter_3_decorator_pattern ;
2
+
3
+ public class Soy extends CondimentDecorator {
4
+
5
+ Beverage beverage ;
6
+
7
+ public Soy (Beverage beverage ){
8
+ this .beverage = beverage ;
9
+ }
10
+
11
+ @ Override
12
+ public String getDescription () {
13
+ return beverage .getDescription () + ", Soy" ;
14
+ }
15
+
16
+ @ Override
17
+ public double cost () {
18
+ return .99 + beverage .cost ();
19
+ }
20
+
21
+ }
Original file line number Diff line number Diff line change
1
+ package learnHeadFirstDesignPatterns .chapter_3_decorator_pattern ;
2
+
3
+ public class Whip extends CondimentDecorator {
4
+
5
+ Beverage beverage ;
6
+
7
+ public Whip (Beverage beverage ) {
8
+ this .beverage = beverage ;
9
+ }
10
+
11
+ @ Override
12
+ public String getDescription () {
13
+ return beverage .getDescription () + ", Whip" ;
14
+ }
15
+
16
+ @ Override
17
+ public double cost () {
18
+ return .77 + beverage .cost ();
19
+ }
20
+
21
+ }
You can’t perform that action at this time.
0 commit comments