装饰模式:顾名思义就是跟他加层层外套,或者说是给一个实体增加更多的形容词
请看demo让你一目了然,呵呵....你懂滴
package Decorator;
/**
*@Description: 装饰模式
*@author Potter
*@date 2012-9-10 下午05:35:07
*@version V1.0
*/
public class App {
/**
* @param args
*/
public static void main(String[] args) {
Coffee coffee=new Tang(new Nai(new NaTie()));
System.out.println("coffee's cost="+coffee.getCost());
System.out.println("coffee's message="+coffee.getMessage());
}
}
coffee类:
package Decorator;
/**
*@Description: 咖啡类
*@author Potter
*@date 2012-9-10 下午05:21:35
*@version V1.0
*/
public interface Coffee {
public float getCost();
public String getMessage();
}
装饰核心类:
package Decorator;
/**
*@Description:装饰模式核心
*@author Potter
*@date 2012-9-10 下午05:21:14
*@version V1.0
*/
public class Decorator implements Coffee{
protected Coffee coffee;
public Decorator(Coffee coffee){
this.coffee=coffee;
}
@Override
public float getCost() {
return coffee.getCost();
}
@Override
public String getMessage() {
return coffee.getMessage();
}
}
实体蓝山咖啡类:
package Decorator;
/**
*@Description: 蓝色咖啡
*@author Potter
*@date 2012-9-10 下午05:25:46
*@version V1.0
*/
public class LanShan implements Coffee {
@Override
public float getCost() {
return 20f;
}
@Override
public String getMessage() {
return "蓝山咖啡";
}
}
实体拿铁咖啡类:
package Decorator;
/**
*@Description: 拿铁咖啡
*@author Potter
*@date 2012-9-10 下午05:23:53
*@version V1.0
*/
public class NaTie implements Coffee {
@Override
public float getCost() {
return 10f;
}
@Override
public String getMessage() {
return "拿铁咖啡";
}
}
装饰类奶:
package Decorator;
/**
*@Description:奶
*@author Potter
*@date 2012-9-10 下午05:33:13
*@version V1.0
*/
public class Nai extends Decorator {
public Nai(Coffee coffee) {
super(coffee);
}
@Override
public float getCost() {
return super.getCost()+5;
}
@Override
public String getMessage() {
return "加奶的"+super.getMessage();
}
}
装饰类糖:
package Decorator;
/**
*@Description: 糖
*@author Potter
*@date 2012-9-10 下午05:30:49
*@version V1.0
*/
public class Tang extends Decorator {
public Tang(Coffee coffee) {
super(coffee);
}
@Override
public String getMessage() {
return "加糖的"+super.getMessage();
}
}
运行结果:
coffee's cost=15.0
coffee's message=加糖加奶的拿铁咖啡
呵呵~ 很容易理解吧!