一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee ),一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee )的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶的咖啡(Coffee),也可以不加,应用桥接模式实现
时间: 2023-05-23 11:02:43 浏览: 95
下面是一个可能的实现代码:
```java
interface Coffee {
String getName();
double getPrice();
}
class JorumCoffee implements Coffee {
@Override
public String getName() {
return "Jorum Coffee";
}
@Override
public double getPrice() {
return 5.0;
}
}
class MediumCoffee implements Coffee {
@Override
public String getName() {
return "Medium Coffee";
}
@Override
public double getPrice() {
return 3.0;
}
}
class SmallCoffee implements Coffee {
@Override
public String getName() {
return "Small Coffee";
}
@Override
public double getPrice() {
return 1.0;
}
}
interface Additive {
String getName();
}
class Milk implements Additive {
@Override
public String getName() {
return "Milk";
}
}
class Plain implements Additive {
@Override
public String getName() {
return "Plain";
}
}
class CoffeeWithAdditive implements Coffee {
private Coffee coffee;
private Additive additive;
public CoffeeWithAdditive(Coffee coffee, Additive additive) {
this.coffee = coffee;
this.additive = additive;
}
@Override
public String getName() {
return coffee.getName() + " with " + additive.getName();
}
@Override
public double getPrice() {
return coffee.getPrice() + 0.5;
}
}
public class CoffeeTest {
public static void main(String[] args) {
Coffee coffee = new JorumCoffee();
System.out.println(coffee.getName() + ": " + coffee.getPrice());
coffee = new CoffeeWithAdditive(coffee, new Milk());
System.out.println(coffee.getName() + ": " + coffee.getPrice());
coffee = new CoffeeWithAdditive(coffee, new Plain());
System.out.println(coffee.getName() + ": " + coffee.getPrice());
}
}
```
这段代码实现了一个简单的咖啡店,其中有三种不同大小的咖啡,以及两种不同口味的添加剂(牛奶和不加)。通过桥接模式,可以将咖啡和添加剂分别抽象成两个独立的类,在运行时动态地组合起来,实现不同口味的咖啡。在这个例子中,构造了一个具有 Jorum 咖啡和牛奶口味的 CoffeeWithAdditive 对象,它的价格为 5.5 元。