看了之前写的那篇博客,感觉有点长而且不容易懂。所以,打算最近将有关设计模式的一些博客慢慢换掉。好了言归正传,说到装饰模式,是一个对组合完美利用的模式。最经典的例子,莫过于卖咖啡,怎么加糖的问题了。相信大家都知道,就不啰嗦了。
为了灵活的组合出各式各样的咖啡,使用装饰模式最合适不过了。
首先定义一个借口,是所有产品的接口:包括价格和描述
package com.wjy.click;
public interface Product {
public abstract int price();
public abstract String detail();
}
然后写我们的基础咖啡类:定价10元
package com.wjy.click;
public class Coffee implements Product{
@Override
public int price() {
// TODO Auto-generated method stub
return 10;
}
@Override
public String detail() {
// TODO Auto-generated method stub
return "I am coffee ";
}
}
最后写我们的装饰类Sugar,定价一份糖5元:
package com.wjy.click;
public class Sugar implements Product{
private Product product;
public Sugar(Product product){
this.product=product;
}
@Override
public int price() {
// TODO Auto-generated method stub
return this.product.price()+5;
}
@Override
public String detail() {
// TODO Auto-generated method stub
return this.product.detail()+"with sugar ";
}
}
最后就可以卖了:
package com.wjy.click;
public class Client {
public static void main(String args[]){
Product product=new Coffee();
product=new Sugar(product);
System.err.println(product.detail());
System.err.println("price: "+product.price());
}
}