1、装饰模式简述
装饰模式以对客户端透明的方式给一个对象附加上更多的责任,可以在不需要创造更多子类的情况下,将对象的功能加以扩展。装饰模式包含如下角色:
Component: 抽象构件
ConcreteComponent: 具体构件
Decorator: 抽象装饰类
ConcreteDecorator: 具体装饰类
2、UML类图
3、代码实现
/**
* 饮料接口
* @author Administrator
*
*/
public interface Beverage {
//返回商品描述
public String getDescription();
//返回价格
public double getPrice();
}
public class CoffeeBean1 implements Beverage {
private String description = "选了第一种咖啡豆";
@Override
public String getDescription() {
return description;
}
@Override
public double getPrice() {
return 50;
}
}
public class CoffeeBean2 implements Beverage {
private String description = "第二种咖啡豆!";
@Override
public String getDescription() {
return description;
}
@Override
public double getPrice() {
return 100;
}
}
// 装饰器类
public class Decorator implements Beverage {
private String description = "我只是装饰器,不知道具体的描述";
@Override
public String getDescription() {
return description;
}
@Override
public double getPrice() {
return 0; //价格由子类来决定
}
}
// 咖啡加入牛奶
public class Milk extends Decorator{
private String description = "加了牛奶!";
private Beverage beverage = null;
public Milk(Beverage beverage){
this.beverage = beverage;
}
public String getDescription(){
return beverage.getDescription()+"\n"+description;
}
public double getPrice(){
return beverage.getPrice()+20;
}
}
public class Test {
public static void main(String[] args) {
Beverage beverage = new CoffeeBean1();
beverage = new Mocha(beverage);
}