在Java中如何定义coffee和milk
时间: 2024-03-12 15:43:43 浏览: 25
在 Java 中,你可以使用字符串变量来表示 Coffee 和 Milk。以下是示例代码:
```
String coffee = "一种由磨碎的咖啡豆制成的饮料";
String milk = "一种乳制品,通常是从牛、羊、马或其他哺乳动物中提取出来的";
```
这样,你就可以在程序的其他地方使用这些变量来表示 Coffee 和 Milk。如果你需要在程序中使用其他数据类型来表示 Coffee 和 Milk,比如类或枚举,你可以在程序中定义它们。
相关问题
使用Java语言代码面向对象实现饮品店 思路:1.定义饮品类(Drink); 2.定义可乐类(Cola),继承饮品类(Drink); 3.定义咖啡类(Coffee),继承饮品类(Drink); 4.定义奶茶类(Milk),继承饮品类(Drink); 5.定义测试类,编写主界面,用Scanner输入数据,用switch嵌套进行选择判断
好的,下面是Java语言代码的实现:
1. 饮品类(Drink)
```
public abstract class Drink {
private String name; // 饮品名称
private double price; // 饮品价格
private int size; // 饮品大小
public Drink(String name, double price, int size) {
this.name = name;
this.price = price;
this.size = size;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public int getSize() {
return size;
}
public abstract void taste(); // 抽象方法,表示饮品的口感
}
```
2. 可乐类(Cola),继承饮品类(Drink)
```
public class Cola extends Drink {
public Cola(String name, double price, int size) {
super(name, price, size);
}
@Override
public void taste() {
System.out.println("可乐口感:甜中带有一点儿苦涩");
}
}
```
3. 咖啡类(Coffee),继承饮品类(Drink)
```
public class Coffee extends Drink {
public Coffee(String name, double price, int size) {
super(name, price, size);
}
@Override
public void taste() {
System.out.println("咖啡口感:苦中带有一点儿甜味");
}
}
```
4. 奶茶类(Milk),继承饮品类(Drink)
```
public class Milk extends Drink {
public Milk(String name, double price, int size) {
super(name, price, size);
}
@Override
public void taste() {
System.out.println("奶茶口感:甜中带有一点儿清香");
}
}
```
5. 测试类
```
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("欢迎来到饮品店,以下是本店的菜单:");
System.out.println("1. 可乐");
System.out.println("2. 咖啡");
System.out.println("3. 奶茶");
System.out.println("4. 退出");
System.out.print("请输入您要选择的饮品编号:");
int choice = scanner.nextInt();
switch (choice) {
case 1:
Cola cola = new Cola("可乐", 3.0, 500);
System.out.println("您选择的是:" + cola.getName() + ",价格为:" + cola.getPrice() + "元,大小为:" + cola.getSize() + "毫升。");
cola.taste();
break;
case 2:
Coffee coffee = new Coffee("咖啡", 5.0, 300);
System.out.println("您选择的是:" + coffee.getName() + ",价格为:" + coffee.getPrice() + "元,大小为:" + coffee.getSize() + "毫升。");
coffee.taste();
break;
case 3:
Milk milk = new Milk("奶茶", 6.0, 400);
System.out.println("您选择的是:" + milk.getName() + ",价格为:" + milk.getPrice() + "元,大小为:" + milk.getSize() + "毫升。");
milk.taste();
break;
case 4:
System.out.println("感谢您的光临,下次再见!");
scanner.close();
System.exit(0);
default:
System.out.println("请输入正确的选项编号!");
break;
}
}
}
}
```
java使用装饰器模式和桥接模式实现大中小尺寸的咖啡和调料尺寸的功能
装饰器模式和桥接模式可以很好地实现大中小尺寸的咖啡和调料尺寸的功能。
首先,我们需要定义一个基础的咖啡类,它有一个getSize()方法,返回咖啡的大小(大、中、小)。
```java
public abstract class Coffee {
protected String description = "Unknown coffee";
public String getDescription() {
return description;
}
public abstract double cost();
public abstract String getSize();
}
```
然后,我们定义三个具体的咖啡类,分别是SmallCoffee、MediumCoffee和LargeCoffee,它们分别实现getSize()方法,返回不同的咖啡大小。
```java
public class SmallCoffee extends Coffee {
public SmallCoffee() {
description = "Small Coffee";
}
public double cost() {
return 2.5;
}
public String getSize() {
return "Small";
}
}
public class MediumCoffee extends Coffee {
public MediumCoffee() {
description = "Medium Coffee";
}
public double cost() {
return 3.5;
}
public String getSize() {
return "Medium";
}
}
public class LargeCoffee extends Coffee {
public LargeCoffee() {
description = "Large Coffee";
}
public double cost() {
return 4.5;
}
public String getSize() {
return "Large";
}
}
```
接下来,我们使用装饰器模式为咖啡添加调料。我们定义一个CondimentDecorator抽象类,它继承自Coffee类,并包含一个protected成员变量,即被装饰的咖啡对象。在CondimentDecorator中,我们重写getDescription()方法,将被装饰的咖啡的描述和调料的描述拼接起来。
```java
public abstract class CondimentDecorator extends Coffee {
protected Coffee coffee;
public abstract String getDescription();
}
```
然后,我们定义三个具体的调料类,分别是Milk、Sugar和Whip,它们继承自CondimentDecorator类。在这些具体的调料类中,我们实现getDescription()方法,将被装饰的咖啡的描述和调料的描述拼接起来,并实现cost()方法,返回咖啡的价格加上调料的价格。
```java
public class Milk extends CondimentDecorator {
public Milk(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", Milk";
}
public double cost() {
return coffee.cost() + 0.5;
}
public String getSize() {
return coffee.getSize();
}
}
public class Sugar extends CondimentDecorator {
public Sugar(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", Sugar";
}
public double cost() {
return coffee.cost() + 0.3;
}
public String getSize() {
return coffee.getSize();
}
}
public class Whip extends CondimentDecorator {
public Whip(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", Whip";
}
public double cost() {
return coffee.cost() + 0.7;
}
public String getSize() {
return coffee.getSize();
}
}
```
最后,我们使用桥接模式将咖啡的大小和调料的尺寸分离开来。我们定义一个Size接口,其中包含一个getSize()方法,返回咖啡的大小(大、中、小)。然后,在Coffee类中包含一个Size成员变量,并实现getSize()方法,返回这个Size对象的getSize()方法的返回值。这样,我们就可以在咖啡的装饰器中引用这个Size对象,从而实现咖啡大小和调料尺寸的组合。
```java
public interface Size {
public String getSize();
}
public class SmallSize implements Size {
public String getSize() {
return "Small";
}
}
public class MediumSize implements Size {
public String getSize() {
return "Medium";
}
}
public class LargeSize implements Size {
public String getSize() {
return "Large";
}
}
public abstract class Coffee {
protected String description = "Unknown coffee";
protected Size size;
public String getDescription() {
return description;
}
public abstract double cost();
public String getSize() {
return size.getSize();
}
public void setSize(Size size) {
this.size = size;
}
}
public class SmallCoffee extends Coffee {
public SmallCoffee() {
description = "Small Coffee";
size = new SmallSize();
}
public double cost() {
return 2.5;
}
}
public class MediumCoffee extends Coffee {
public MediumCoffee() {
description = "Medium Coffee";
size = new MediumSize();
}
public double cost() {
return 3.5;
}
}
public class LargeCoffee extends Coffee {
public LargeCoffee() {
description = "Large Coffee";
size = new LargeSize();
}
public double cost() {
return 4.5;
}
}
public abstract class CondimentDecorator extends Coffee {
protected Coffee coffee;
public abstract String getDescription();
}
public class Milk extends CondimentDecorator {
public Milk(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", Milk";
}
public double cost() {
double cost = coffee.cost();
if (coffee.getSize().equals("Small")) {
cost += 0.3;
} else if (coffee.getSize().equals("Medium")) {
cost += 0.5;
} else if (coffee.getSize().equals("Large")) {
cost += 0.7;
}
return cost;
}
}
public class Sugar extends CondimentDecorator {
public Sugar(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", Sugar";
}
public double cost() {
double cost = coffee.cost();
if (coffee.getSize().equals("Small")) {
cost += 0.2;
} else if (coffee.getSize().equals("Medium")) {
cost += 0.3;
} else if (coffee.getSize().equals("Large")) {
cost += 0.4;
}
return cost;
}
}
public class Whip extends CondimentDecorator {
public Whip(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", Whip";
}
public double cost() {
double cost = coffee.cost();
if (coffee.getSize().equals("Small")) {
cost += 0.4;
} else if (coffee.getSize().equals("Medium")) {
cost += 0.6;
} else if (coffee.getSize().equals("Large")) {
cost += 0.8;
}
return cost;
}
}
```
这样,我们就可以通过组合咖啡和调料的方式实现不同尺寸的咖啡和调料尺寸的功能了。例如,下面的代码创建了一个小杯加牛奶和糖的咖啡,并输出了它的描述和价格。
```java
Coffee coffee = new SmallCoffee();
coffee = new Milk(coffee);
coffee = new Sugar(coffee);
System.out.println(coffee.getDescription() + " $" + coffee.cost());
```