00:00
各位,我们根据前面的分析的这个类图,我们来玩一把,还是老规矩,我们把这一个披萨店呢分成两个包包,一个包呢,就是存放我们披萨的。这个没有问题,还有一个包包,诶这个为什么老生成一个这样的文件哈,知道为啥。呃,还有一个包呢,对,还有一个包,还有一个包呢,就是嗯,我们这个order包。对,完成一个订购的对吧,好产生了。这个保信息啊。考验这个。好,现在呢,我们把这个披萨先拿过来,披萨前面不是有已经有了吗?我就怎么样,我就不再去重新生成了,因为他这没有变化,好这几个这几个就过来了哈,这几个就过来了啊,检查一下ABS factory没问题。这个也是可以的,好披萨这一层就完完事了,下面呢,我们根据这个思路,我们先来完成这一个接口,就是ABS factory这个抽象工程的这这一层就是它的接口层,那么我来写一个。
01:06
跟上老师思路,先写一个接口ABS by没问题吧?OK,那么来写一下这个代码。写一个注释。这是干什么呢?这些地方是一个是一个抽象。工厂模式的阶阶抽象层。就是那个抽象层。抽象层。OK,抽象层。这个抽象层呢,是接口。那这里面至少我们需要有一个方法叫public,对不对?披萨到create披萨。那这个地方你给我来一个order类型,就是你要定什么口味的就行了,大家看这个地方,我要把它做成一个抽象方法。这是个抽象方法,我先把包引进来,因为披萨没有。别引错了,引我们的这个里面的披萨好吧。
02:03
好,这个地方干什么呢?是让下面的下面的子类。工厂子类,工厂子类来具体的实现来具体。来具体实现,OK,那这个就有了,我们接着呢来见。来验他的两个工厂子类,一个是北京的。对,北京的bay没问题吧,北京的factory。那北京的factory我们怎么来写呢?非常的简单,非常简单。首先我们。我们先实现ABS factory这个接口,当然这里面就有方法了。啊,实现。那这个create披萨我们怎么来实现呢?那跟前面的道理其实是一样的,披萨。对不对,先默认为一个空。拨一个空,那么现在就来做判断,如果它的这个order类型看清楚了,他的order type呢,是。
03:06
呃,这个奶酪口味的。对,奶酪口味的,那么我们这个披萨就是六一个北京奶酪。口味的披萨就可以了,是不是这样子道理。AIRE如果它的。这个呃,这个定呃order的一个类型呢,它是要胡椒口味的。那我显然返回的paper啊,返回就是北北京的胡椒口味的披萨,等于又一个北京胡椒口味的披萨。没问题吧?北京不要口味,最后呢,我们返回它就可以了,返回什么,返回这个披萨,当然如果他说的不对,那返回的就是个空是吧。诶,这个地方有一个,呃,这个这个这个引错了,引错了。好,重新来引一下,要引我们这边的北京切,呃,祭祀披萨,好,这是北京工厂,我写个注释,这是什么呢?这是一个工厂子类。
04:11
对,工厂之类,同样我们还有一个伦敦的,对不对,还有一个伦敦的,一样的写伦敦bay。Factory,然后这个伦敦factory呢,它也要去实现我们这一个抽象的工厂接口,是不是同样我们把这个代码呢写到这来。因为跟前面大同小异,因此呢,我复制一份。没问题吧,我复制一份。复制一份过后呢,我们要改变的地方就是这个地方。哪里就是这个地方,不是北京的了,改成伦敦的就可以,这边改成伦敦的胡椒口味的披萨好,这时呢,我们需要引包。Or in?啊,引进去就可以了,不要选错了,选的是。
05:01
啊,不是,呃,这个抽象工厂这个包包里面的哈,分离取下。完事了,诶这个地方怎么还是。还是这个哈,讨厌这个再来。把它选中。好,同学们,那关于这两个子类工厂我们就做完了,也就是说现在呢,我们把这个这两个都做完了。对吧,这样就是,而且大家可以看到北京factory呢和伦敦factory他们分别跟自己对应的口味的披萨进行了一个依赖。进行了依赖,好的,那现在我们还差什么呀?还差一个alder披萨,那就写呗。Order披萨,我们写一个来,走一个叫order pizza。那阿这个代码其实跟我们前面写过的,呃,这个其实没有太大的区别,没有太大区别,那写一个就行了,首先我们有个AB factory,我们刚才讲过al披萨呢,它是会聚,呃,聚合一个啊聚合聚合一个ABS factory通过这个接口的,所以说我在这定一个这个东西ABS。
06:07
BY。Factory。对,Factory,那大家想你有这个东西的话,是不是应该有个set方法呀,对,我们要一个set方法,Public void set factory,你给我一个工厂,那给的时候呢,我们通过接口。来进行这样一个呃关联接口,通过这个,呃,通过这个接接口发生一个依赖,好,那这边拿到这个代码过后呢,我们跟前面这个思路其实是非常一样,首先我这有个披萨,因为你最终要返回一个披萨嘛,披萨。是这个是他来做这个事儿六。啊,是个空的,然后呢,我们这有一个order type跟前面很像,这个是用户输入的。对吧,用户用户输入,那用户输入,然后呢,这个this.factory ABS对吧?ABS factory就那这个就不叫ABS了,直接叫factory比较合理。
07:07
因为这个给他的一个引用肯定是一个具体的对象实例了,然后呢,Factory指向他。给到他就行。好,有了它了,有它以后我们仍然是一个do外循环。对吧,度外循环处。那这段代码跟前面很像,我就快速的写一下,首先我拿到一个order,这个order type,呃,Order type这个方法呢,跟前面也有很多相似的,我就用一下有一个方法对吧?同学们还记得吗?有一个方法是用来获取用户输入的。叫get type,我拿来直接用。我拿来直接用。好,放这就可以。没问题吧,那这里面我们就调get type。Get,根据他这个order type呢,我们来做这个相应的一个处理就可以了,Order type有了,现在披萨。
08:04
等于用factory点披萨。把这个auto放进去,那大家想哈,因为我们在执行这个set package的时候呢,由外部已经给我们设置了一个具体的工厂指类的对象实例,那这个地方bay指向谁就是谁。这是Java基础里面的东西,我就不讲了,就这个factor,它有可能是伦敦factory,也可能是北京factory,就是你你知道设置的什么就是什么啊,所以说大家这注意啊,Batory,呃,可能。可能是北京的,北京的工厂子类,也可能是,也可可能。也也可以啊,可以可可能可能是伦敦的,伦敦的工厂之类是这样子啊,工厂之类,那主要是学云,你到时间给他传的是什么就行,因为它是个接口嘛,它是个接口好的。
09:05
那有了这个东西,我们就怎么样啊,我们就可以来把这个信息输出一下。如果我们得到的披萨它不等于空,说明我们创建OK了,我输出信息。是不是,所以说这个时候就说明呃,订购成功或叫制作成功都可以叫订购OK啊,订购OK的披萨。点。披萨对不对点bake。好,披萨点我们的看。披萨,点我们的box。代码就行了,那当然还有一种可能性,就是他返回就是个空,就说没有这样的,那我就提示一句话,就说订购失败。对吧,订购。订购失败。订购失败的话呢,我就不玩了,我就直接怎么样break,就退出我们这个循环,就退出我们这Y循环,好的,嗯,那这个代码就说完了,紧接着呢,这个size factor呢,还是要调用一下,因此我在构造器里面完成一个调用构造器。
10:06
写一个public。Public好,这个地方其实我们可以做成私有的啊,不要让别人从这边去设置对吧。私有来看这个为什么私有他不让用呢。看一下啊。Private。Public。Ber。Site factory,为什么这个地方出问题了,看一下。号先格式化一下先。先格式化一下先。哦,这个写错了是吧,这个地方。好,这地方写着私有的呢。没问题啊,没问题,刚才因为我这写了一个东西没有写全,所以他有一个警告信息public,然后呢,我们写上这个构造器。写上那个过去,那你这个工厂呢,从这给我传进来就可以了,ABS factory factory。
11:01
对,然后呢,这边我们set factory。然后把factory传进去就可以了。好,这样这样子,我们再回头来看呢,我们这个都写完了,对吧,Order。那披萨呢,也聚合了ABS factory,通过这个接口跟我们一个子类进行了一个聚合蛋白就写完,那写完过后我们是不是可以测一下,对吧,我们可以测一下,测的时候呢,我们还是。嗯,来做一点提示吧,不做提示有时候看起来很怪很怪,好,我这做一个提示。在在地方创建的时候,我提示一句话。呃,提示一句,什么样的话呢?使用的是抽象工厂模式。抽象工厂模式对不对?好,来一个波浪号。使用的是抽象工厂模式,同样的,我在伦敦这个工厂里边也输出这样一句话。
12:00
使用的是抽象工厂模式,好,最后我们还差一个什么呀,还差一个披萨店就可以用了。披萨。食道。OK,把主方法勾上。把主方法勾上,现在我们来用一下。在这个时候用呢,就比较简单了,大家想,因为你这个order披萨里面呢,需要一个一个一个工厂类纸类,那你就给他嘛,你你想用什么就用什么六一个,大家看我在这里面写个order,我要订购。披萨了,那六一个什么呢?比如说我要订北京的,对,那我要订北京的,我就给他一个北京工厂。不就完了吗?对不对,当然你你也可以选择哈,就是你可以让用户选,你要订北京的,那我就调北京的battery,你要订伦敦的,那就是伦敦的battery,来我运行一下。他跑起来。那跑起来,我们看看能不能跑呢?首先我们来定义,呃,输入一个气。
13:00
可以看到他说使用的是抽象工厂模式,北京的奶酪味出来了。北京。Paper好,北京的胡椒的披萨,北京还有什么呀,我们看还有一个就是。Grrek啊,用这个没有哈,这个没有,因为我这就两个口味,Grrek啊,这个就退出来了。因为我我目前呢,就写了一个paper的胡椒的,还有一个北京的奶酪,没有写北京的这个。希腊口味的对不对,没有写好,那我们再来试一下伦敦,这个能不能用呢?我们来看伦敦这一个,我们能不能得到伦敦工厂。的相关的披萨的,呃。嗯,这这个订购来走一个。跑起来。现在我调的是伦敦工厂。确。好,这是抽象工作模式,没问题,伦敦的奶酪味的披萨,再来paper。
14:02
这是伦敦的胡椒味的披萨,最后我们输一个,哈喽退出。退出重新没有了,好,同学们,那关于我们这一个工厂,呃,抽象工厂模式的一个演示呢,就给大家讲到这了,大家主要是要记住什么呀,其实最核心的呢,就是你要把这个分析的过程,还有他们这个类图的关系搞懂,就不会乱了,其实你要说他们差别大吗?有,但是也不是特别大,其核心思想呢。其实大同小异是不是这样?道理只是抽象工厂模式,它。把这个工厂模式抽象了两层,而我们简单工厂模式呢,它比较嫩,它就是直接一个工厂就把它做完了,但是你一个工厂你很难满足对多种不同实例的创建。于是他。提出了抽工程模式,那同学们在实际开发中怎么选择呢?就是说如果说你将来这一个产品的种类很多,那你用抽象工程模式应该灵活性很高,如果你只是为了呃,就是那个产品就那么几种类型,也没有什么子类,OK,那你用简单工程模式其实也就可以,对不对?好,所以说同学们呢,要活学活用,主要是要记住这个图形。
15:14
好,就要记住这个图形,好,那么这个就是我们工厂模式的一个讲解,就到这里。
我来说两句