装饰者模式:动态地将责任附加在对象上。若要扩展功能,装饰者提供比继承更有弹性的替代方案。
简单来说,装饰者模式就是一层一层地包裹,其实我们都有用过,就是例如InputStream,上例子:
像这种,就是运用到“装饰者模式”。最内面的一层是实现最简单的内容,然后在一层一层地装饰。
参考《Head First设计模式》,写了一个关于星巴兹卖饮料,加调料(例如牛奶、豆浆等) 的例子。上例子:
“饮料”类,具有描述和价格2个方法。价格的方法是抽象的。
“调料”类继承“饮料”类,只有一个描述的方法,而且还是抽象的。
“浓咖啡”类继承“饮料”类,构造方法写“我是浓咖啡”,价格方法返回具体价格的。
“摩卡”类继承“调料”类,把“饮料”类在构造方法里面初始化,然后描述方法是“饮料类的描述+我是摩卡”,价格方法是“饮料类的价格+摩卡的价格”。注意:这里就已经有了装饰,就好像包礼物一样,用漂亮的包装纸把礼物包起来了。
同理,我们增加“豆浆”和“奶泡”的类。
看我们怎样弄一杯“含有摩卡、豆浆、奶泡的浓咖啡”出来,哈哈。是不是跟I/O流一样的弄法呢。
“装饰者模式”就是这样子的。看上去貌似用过,貌似很简单,但是我觉得是我介绍这么多个设计模式里面,比较难有思绪的一个。希望以后经过不停的锻炼,可以掌握到它的精粹了。O(∩_∩)O哈哈~