//Drink.java
public abstract class Drink {
public String description;
private float price = 0.0f;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public abstract float cost();
}
//Coffee.java
public class Coffee extends Drink{
@Override
public float cost() {
return super.getPrice();
}
}
//Espresso.java
public class Espresso extends Coffee {
public Espresso(){
setDescription("Italy Coffee");
setPrice(6.0f);
}
}
//LongBlack.java
public class LongBlack extends Coffee {
public LongBlack(){
setDescription("Long Black");
setPrice(5.0f);
}
}
//ShortBlack.java
public class ShortBlack extends Coffee{
public ShortBlack(){
setDescription("Short Black");
setPrice(4.0f);
}
}
//Chocolate.java
public class Decorator extends Drink {
private Drink obj;
public Decorator(Drink obj){
this.obj = obj;
}
@Override
public float cost() {
// getPrice这里是调料的价格
return super.getPrice() + obj.cost();
}
@Override
public String getDescription() {
return super.getDescription() +" " + super.getPrice() + " && " + obj.getDescription();
}
}
//Chocolate.java
public class Chocolate extends Decorator {
public Chocolate(Drink obj){
super(obj);
setDescription("Chocolate");
setPrice(3.0f);
}
}
//Milk.java
public class Milk extends Decorator {
public Milk(Drink obj){
super(obj);
setDescription("Milk");
setPrice(2.0f);
}
}
//Soy.java
public class Soy extends Decorator {
public Soy(Drink obj){
super(obj);
setDescription("Soy");
setPrice(1.5f);
}
}
原文:https://www.cnblogs.com/nedrain/p/13198766.html