-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDecoratorTest.java
More file actions
163 lines (137 loc) · 3.62 KB
/
DecoratorTest.java
File metadata and controls
163 lines (137 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package btp.oneP;
import java.util.ArrayList;
import java.util.List;
public class DecoratorTest {
@SuppressWarnings("static-access")
public static void main(String[] args) {
OriginalCoffee originalCoffee = new OriginalCoffee();
double priceMilk = 10.0;
Milk milkCoffee = new Milk(originalCoffee,priceMilk);
milkCoffee.mixing();
System.out.println("当前咖啡中的配料:"+milkCoffee.foodList);
System.out.println("当前咖啡价格:"+milkCoffee.getPrice());
System.out.println("---------------------------");
double priceMatcha = 20.0;
Matcha matchaCoffee = new Matcha(milkCoffee,priceMatcha);
matchaCoffee.mixing();
System.out.println("当前咖啡中的配料:"+matchaCoffee.foodList);
System.out.println("当前咖啡价格:"+matchaCoffee.getPrice());
System.out.println("---------------------------");
double priceChocolate = 30.0;
Chocolate chocolateCoffee = new Chocolate(matchaCoffee,priceChocolate);
chocolateCoffee.mixing();
System.out.println("当前咖啡中的配料:"+chocolateCoffee.foodList);
System.out.println("当前咖啡价格:"+chocolateCoffee.getPrice());
System.out.println("---------------------------");
}
}
/**
* 装饰品和被装饰器的共同接口
*
*/
interface CoffeeTaste{
//返回价格
double getPrice();
//搅拌咖啡
void mixing();
}
/**
* 原始的被装饰器
*
*/
class OriginalCoffee implements CoffeeTaste{
private String name;
public OriginalCoffee(){
name = "原味咖啡";
System.out.println("原味咖啡的价格是:50");
}
@Override
public double getPrice() {
//原味咖啡的价钱
return 50;
}
@Override
public void mixing() {
System.out.println("--搅拌咖啡");
}
}
/**
* 装饰品的共同父类
*
*/
abstract class SnacksAndDesserts implements CoffeeTaste{
public static List<String> foodList= new ArrayList<String>();
//小食和甜品的价格
private double additionalPrice;
//要加入小食和甜品的咖啡
CoffeeTaste coffeeTaste;
public SnacksAndDesserts(CoffeeTaste coffeeTaste,double additionalPrice){
this.coffeeTaste = coffeeTaste;
this.additionalPrice = additionalPrice;
}
//返回价格
@Override
public double getPrice() {
double priceNow = coffeeTaste.getPrice()+additionalPrice;
return priceNow;
}
abstract void add();
}
/**
* 牛奶类
*
*/
class Milk extends SnacksAndDesserts{
public Milk(CoffeeTaste coffeeTaste, double additionalPrice) {
super(coffeeTaste, additionalPrice);
System.out.println("O(∩_∩)O~~牛奶的价格是:"+additionalPrice);
}
@Override
void add() {
System.out.println("--咖啡中加入牛奶");
SnacksAndDesserts.foodList.add("牛奶");
}
@Override
public void mixing() {
add();
System.out.println("--牛奶加入咖啡中搅拌");
}
}
/**
* 抹茶类
*/
class Matcha extends SnacksAndDesserts{
public Matcha(CoffeeTaste coffeeTaste, double additionalPrice) {
super(coffeeTaste, additionalPrice);
System.out.println("O(∩_∩)O~~抹茶的价格是:"+additionalPrice);
}
@Override
void add() {
System.out.println("--咖啡中混入抹茶");
SnacksAndDesserts.foodList.add("抹茶");
}
@Override
public void mixing() {
add();
System.out.println("--抹茶加入咖啡中搅拌");
}
}
/**
* 巧克力类
*/
class Chocolate extends SnacksAndDesserts{
public Chocolate(CoffeeTaste coffeeTaste, double additionalPrice) {
super(coffeeTaste, additionalPrice);
System.out.println("O(∩_∩)O~~巧克力的价格是:"+additionalPrice);
}
@Override
void add() {
System.out.println("--咖啡中加入巧克力");
SnacksAndDesserts.foodList.add("巧克力");
}
@Override
public void mixing() {
add();
System.out.println("--咖啡加入咖啡中搅拌");
}
}