举一个例子,我们现在有一个需求,做一个煎饼
假设一开始的需求是一个煎饼5块钱
客户增加了一个需求,要加个蛋,通常做法是继承基础类
又增加一个需求,再加火腿肠
每次增加需求,就得根据需求去重新修改;下次调整需求,又要在原有逻辑上进行修改,违背了开闭原则,并没有支撑可扩展性;
那么,使用装饰者模式会有什么不同?
大部分代码为了支持可扩展性,会采用面向接口开发,将共通的逻辑抽成模板方法;通过继承实现扩展逻辑,对原始逻辑无侵入。
在上面煎饼的示例中,公共的逻辑可转化为以下代码:
一开始,需求只有煎饼
装饰者模式核心功能点在将可扩展的点单独抽出来提供扩展,也是提供模板类
现在,我们开始加需求,按上面的例子,增加鸡蛋
增加火腿肠
最终效果