Skip to content

Commit 8e92cd2

Browse files
decorator pattern
1 parent 68166ed commit 8e92cd2

File tree

8 files changed

+138
-0
lines changed

8 files changed

+138
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package learnHeadFirstDesignPatterns.chapter_3_decorator_pattern;
2+
3+
public abstract class CondimentDecorator extends Beverage {
4+
public abstract String getDescription();
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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+
}

0 commit comments

Comments
 (0)