如果你没了解过装饰者模式,那么请继续往下看,如果你是老司机,那么,你可以快速往下看。
开始装个13,再进入正文。
一如既往,你能从本文了解到如下信息:1. 一个简单的装饰者demo? 2. 什么是装饰者模式? 3. 总结。
来讲个需求
假如现在你有这么个需求,需要给咖啡馆编写一套收费系统。咖啡馆有卡布奇洛,拿铁,美式咖啡,浓缩咖啡……二十几种,配料包括:糖,奶油,牛奶,摩卡,奶泡……十几种,包装有外卖盒,精美咖啡杯,商务咖啡杯……七八种。需要帮忙设计一套收费系统。
第一种思路:
最死板的方法,每个咖啡种类,每种配料,每种包装都生成一个类,然后选择何种类就添加何种类的金额。
我点一杯加糖拿铁用漂亮杯子装计算价格及编写描述的代码就这么写:
mResult.setText("您点了:" + new BeautifulCup().description() + new Soul().description() + new Latte().description() + + "\n一共消费了:" + new BeautifulCup().cost() + new Soul().cost() + new Latte().cost());
第二种思路:
我们在第一种思路上进行扩展, 我们建立一个基础类Matrial,所有的咖啡类,配料类,装饰类继承这个基类。再进一步,我们想办法让用户每添加一个配料都直接计算出结果,不要等最后一次性计算。
基于上面 的思路,我需要定一杯加糖拿铁的代码如下:
mResult.setText("您点了:" &#