00:00
Java设计模式里面的下一个。装饰者设计模式。我们来看一个项目的需求。然后呢,引出我们要讲的装饰者设计模式,说现在呢,星巴克这个咖啡呢,需要我们做一个订单的项目,要求是这样子的。说这个星星巴克的咖啡呢,它有一些单品咖啡,有这么几种,Espresso,意大利的浓咖啡,Espresso,那么还有一种就是呃,Short black,还有一个long black,美式咖啡,还有一个迪卡,迪卡是无英咖啡,就是这些咖,这几种咖啡一共有12344种,他们是单品咖啡。也叫做也叫做咖啡的种类,那么有一些人喝咖啡的时候呢,他需要加一点调料,对吧?有些人喜欢喝咖啡的时候加点牛奶,有些人喜欢加一点巧克力,OK,有些人喜欢加点豆浆。
01:00
那么调料呢?有三种,牛奶。Milk soy豆浆,还有chocolate。那根据你自己的口味不同呢,你可以先点一个单品咖啡,就是相当于相当于是单品咖啡。单品当然也可以单点啊,单品咖啡加什么呢?加我们的调料这种模式来进行一个配合。OK,就是单品咖啡加调料的模式,你也可以单独的点一个咖啡,比如说我就喜欢喝无因咖啡,我不加任何调料也行。但是你也可以组合对吧,现在呢,他的要求是扩展,在扩性,扩展新的咖啡种类的时候,需要有良好的扩展性,改动方便,维护方便,就这么一个要求。那么还有一个要求需要用oo的方法,就是面向对象的。方法来计算不同种类咖啡的费用。客户可以点单品咖啡,也可以点单品咖啡加调料组合,就是刚才我说的,那如果说你在点这一个单品咖啡的时候,你还要考虑他有没有点调料,如果点了调料,还得考虑他这个调料点了几份,比如说我点了一个无因咖啡,再加两份巧克力。
02:14
明白好这样子呢。就是我们这一个星巴克星星巴克的咖啡订单项目的一个需求,那同学们想你会怎么来做呢?OK啊,那现在呢,我们还是用最容大家容易想到的方法来解决这个问题,那大家容易想到的方法方案一。那方案一呢,一般的人会这样想,我呢,怎么样,我去做一个抽象类叫drink drink就是我们的。饮料把它做成一个抽象类,这里面呢会有对饮料的描述,然后呢,这边会有一个方法cost计算饮料的这一个成本,那下面呢,因为他可以点单品咖啡。
03:02
是这样的吧,可以点单品。也可以是单品。加调料,所以说你最容易想到的方法就是把各种组合都做出来,你比如说。你比如说。这是。低呃,DCADCA,无音咖啡,它的成本。Short black咖啡的一个一个费用。美式咖啡,意大利浓咖啡,然后呢?下面大家看,麻烦的事情出现了,因为单品咖啡。他在进行调料组合的时候,这个组合的情况非常的多,是不是你比如说。我们就以意大利浓咖啡,就是espresso,它可以跟milk进行一个组合。它也可以跟milk加豆浆组合。它也可以是。这个espresso加单独加一份豆浆,那这个大家可以想象到问题已经出现了什么样。
04:02
就是你这个单品咖啡加调料这种组合,这个数量非常的大。你搞不好是个全排列。那这个是非常大的一个非常恐怖的一一种组合,那这样就会造成一个什么问题,同学们,它造成的问题大家一想就想出来了,肯定是会造成我们整个这种方案,会造成我们累爆炸,就是你的你的这个类会很多,明白我的意思吧,所以说我们来对这一个第一个方案它存在的问题进行一个分析,我们来说一说根据刚才的。根据刚才这个说明呢,我们可以分析到这样几个问题啊,来我们一起分析吧,找到他的问题再说解决方案drink,我们说刚才同学们看到的drink这个类呢,是一个抽象类,没问题吧,它表示什么呢?表示我们喝的这个饮料。问题。没问题,那么同学们刚才看到,在刚才我们分析的时候,你们看到的这个。
05:03
This description,这是一个描述是吧,我简写啊,Description就是。就是对饮料的描述。就是对咖啡。咖啡的一个描述。没问题吧,比如我们可以获取咖啡的名字,比如咖啡的名字。OK,那紧接着呢,我们看到还有一个方法叫cos的方法,大家还记不记得这个cos这个方法就是干什么呢?OK,就是计算。就是计算我们的费用。是不是计算我们费用它呢?在drink里边,它是一个抽象,抽象方法drink,在drink drink类中,我们会把它做成一个什么呢?做成一个抽象方法。是这样子吧。诶,那现在我们来考考察一下你们看到的像迪迪卡。
06:00
这个呢,就是我们所说的单品咖啡。单品咖啡,那同学们可以看到我们这边单品咖啡有四种。有四种,但是这个单品咖啡,单单品咖啡呢,从这里看一看,它是继承了。他是继承了什么,他继承了我们drink。对不对,然后并他会并实现什么呀,并实现我们cos的方法,那你单品咖啡。有多少成本,这个是比较容易想到的,用你的每一个单品咖啡的单价去乘以他点的份数就完事了,那同学们刚才刚才看到的这个这个图形就是。Presso admi,这个就是什么呢?就是它的一个组合,组合就会形成很多,可能们看到的像这个express price,这个我看才express。然后呢,加上我们的M。Milk。它就是什么呢?诶,就是单品咖啡。咖啡加什么呀,加调料。
07:00
加调料好,同学们可以看到这个组合问题在这里,这种组很多很多,对不对,所以说我们分析这个问题已经出来了,问题是什么呢?这样设计,这样设计会干什么呀?会有很多的类,很多类,是不是有很多类呢?那就会行,就会就会干什么呢?当我们增加。当我们增加一个单品咖啡。单品咖啡。咖啡或者或者一个新的调料,是是不是你有可能还要增加这个调料干什么呢?数量就会变成倍增这个类的数量。对,它的数量就会倍增。倍增,那这个倍增呢,那你就很恐怖了,就会干什么呢,就会。就会出现这个内爆炸,就是我们所说的内爆炸。那爆炸呢,就是很多很多了爆炸。
08:03
好,这个方案最后我们发现不可取。不可取,但是你不管怎么样啊,这也是算是一个方案。正因为这个方案,才导致我们待会儿要讲的。下一个方案对不对?好,第一个方案我们有了,但是有问题,有问题OK,我们把第一个方案的分析就到这里,待会儿呢,我们看第二个方案又怎么样。
我来说两句