package Decorator_pattern;
abstract class Food {
String description = "我能吃";
public String getDescription() {
return description;
}
public abstract double cost();
}
abstract class Flavour extends Food {
public abstract String getDescription();
}
class Pizza extends Food {
public Pizza() {
description = "披萨";
}
@Override
public double cost() {
return 2.6;
}
}
class Sausage extends Flavour {
Food food;
public Sausage(Food food) {
this.food = food;
}
@Override
public String getDescription() {
return "香肠" + this.food.getDescription();
}
@Override
public double cost() {
return this.food.cost() + 1.2;
}
}
class Vegetable extends Flavour {
Food food;
public Vegetable(Food food) {
this.food = food;
}
@Override
public String getDescription() {
return "蔬菜" + this.food.getDescription();
}
@Override
public double cost() {
return this.food.cost() + 1.1;
}
}
public class Main {
public static void main(String args[]) {
Food food = new Pizza();
System.out.println("初始就是一个原味的披萨");
System.out.println(food.getDescription() + " " + food.cost());
food = new Sausage(food);
System.out.println("加了一份香肠之后");
System.out.println(food.getDescription() + " " + food.cost());
food = new Vegetable(food);
System.out.println("加了一份蔬菜之后");
System.out.println(food.getDescription() + " " + food.cost());
}
}