写在前面
Java中的设计模式可分为创建型模式、结构型模式、行为型模式,每一类都包括多个具体的设计模式。
今天我们就来细说一下结构型模式中的装饰者模式。
装饰者模式,Decorator Pattern,可以在不改变当前对象的情况下,为当前对象增加新的功能,这期间不会修改对象结构。
装饰者模式其实在生活中有很多可以抽象出来的例子。
比如在星巴克中喝咖啡,就会给咖啡(对象),增加奶(功能),增加糖(功能)。
再比如在食堂中吃盖饭,就会给米饭(对象),增加木须肉(功能),增加红烧肉(功能)。
等等等,看了装饰者模式后,只要你细心一些,就会发现生活各处有很多很多的相似业务。
真实业务实现装饰者模式
接下来我们根据食堂业务来实现一下装饰者模式。
业务场景
A同学今天涨工资了,点了个豪华套餐,红烧肉盖饭 + 红烧肉盖饭 + 鸡排 + 煎蛋,其中一份只有红烧肉不要饭,因为碳水太多容易长胖。
在开发人员的角度,果断想到这里可以是装饰者模式。
盖饭(米饭盖米饭也是盖饭,不要杠......)是对象,红烧肉、鸡排、煎蛋是功能,从原本的对象上加上新功能,而且原本的对象结构没有变,依然可以再加入新的菜品(功能),这最后计算费用的时候无疑就是要使用装饰者模式了。
我们用代码来实现一下吧。
因为盖饭会存在很多种初始套餐,所以我们要把盖饭类设置成抽象类,初始套餐(红烧肉盖饭、木须肉盖饭等等)只要去继承盖饭抽象类就好了。
盖饭抽象类创建好了,接下来就是实现红烧肉盖饭的类了。
其中实现了盖饭抽象类的cost方法,并在方法内写入红烧肉盖饭的价钱。
当然了,还会有各种各样的盖饭,我就不一一实现了。
然后就是配菜类了,为了对配菜统一管理和后期业务功能复杂化后的维护考虑;
我们还要在这里创建一个配菜抽象类,所有的配菜都应该去继承配菜抽象类;
而配菜抽象类去继承盖饭抽象类。
这样的设计就可以用非常友好的代码来计算出相应的钱数了,来看最终的实现方法。
大功告成,这样,一个装饰者模式就实现出来了。
下一篇说一下装饰者模式的优缺点,以及在什么情况下使用装饰者模式,希望大家点赞支持!!