根据真实业务场景去实现一下设计模式中的装饰者模式

952 阅读3分钟

这是我参与新手入门的第2篇文章。

写在前面

Java中的设计模式可分为创建型模式、结构型模式、行为型模式,每一类都包括多个具体的设计模式。

今天我们就来细说一下结构型模式中的装饰者模式。

装饰者模式,Decorator Pattern,可以在不改变当前对象的情况下,为当前对象增加新的功能,这期间不会修改对象结构。

装饰者模式其实在生活中有很多可以抽象出来的例子。

比如在星巴克中喝咖啡,就会给咖啡(对象),增加奶(功能),增加糖(功能)。

再比如在食堂中吃盖饭,就会给米饭(对象),增加木须肉(功能),增加红烧肉(功能)。

等等等,看了装饰者模式后,只要你细心一些,就会发现生活各处有很多很多的相似业务。

真实业务实现装饰者模式

接下来我们根据食堂业务来实现一下装饰者模式。

业务场景

A同学今天涨工资了,点了个豪华套餐,红烧肉盖饭 + 红烧肉盖饭 + 鸡排 + 煎蛋,其中一份只有红烧肉不要饭,因为碳水太多容易长胖。

在开发人员的角度,果断想到这里可以是装饰者模式。

盖饭(米饭盖米饭也是盖饭,不要杠......)是对象,红烧肉、鸡排、煎蛋是功能,从原本的对象上加上新功能,而且原本的对象结构没有变,依然可以再加入新的菜品(功能),这最后计算费用的时候无疑就是要使用装饰者模式了。

我们用代码来实现一下吧。

因为盖饭会存在很多种初始套餐,所以我们要把盖饭类设置成抽象类,初始套餐(红烧肉盖饭、木须肉盖饭等等)只要去继承盖饭抽象类就好了。

image.png

盖饭抽象类创建好了,接下来就是实现红烧肉盖饭的类了。

image.png

其中实现了盖饭抽象类的cost方法,并在方法内写入红烧肉盖饭的价钱。

当然了,还会有各种各样的盖饭,我就不一一实现了。

然后就是配菜类了,为了对配菜统一管理和后期业务功能复杂化后的维护考虑;

我们还要在这里创建一个配菜抽象类,所有的配菜都应该去继承配菜抽象类;

而配菜抽象类去继承盖饭抽象类。

image.png

image.png

image.png

这样的设计就可以用非常友好的代码来计算出相应的钱数了,来看最终的实现方法。

image.png

image.png

大功告成,这样,一个装饰者模式就实现出来了。

下一篇说一下装饰者模式的优缺点,以及在什么情况下使用装饰者模式,希望大家点赞支持!!