00:00
各位,我们来看一下工厂模式的第三,一种叫抽象工厂模式。那抽象过这种模式,它是。它是怎样子的呢?我们来看,它是定义了一个接口,它先定义一个接口,用于创建相关或有依赖关系的对象图,而无需指明具体的类,也就是说他先做一个接口出来。然后呢,再让它下面的这个工厂内去实现它。所以说抽象工厂模式,它其实可以将简单工厂模式和工厂方法模式进行一个整合。那待会儿呢,我们画画一个类图,大家就清晰了。从设计层面上看呢,抽象工厂模式就是对简单工厂模式的一个改进。或者叫做进一步抽象。那么这个抽象工厂模式,它会将工厂抽象成两层,一个叫抽象工厂。
01:01
和具体实现的工厂子类,程序员呢,可以根据创建对象类型使用对应的工厂子类,也就是说我们我们可以把create。Create就是创建对象实例,这个方法呢,做成一个抽象方法,放在一个接口里边,然后让下面。的一个工厂子类去实现,然后呢,我们需要用到哪个工厂,我们就把它去聚合,聚合到我们这一个使用类或者叫客户端就可以了,这样子的话呢,一个简单的工厂类就变成了工厂除。就是说我们有很多工厂之类,这样呢就利于我们代码的维护和扩展,大家看用语言文,用语言来描述啊,其实大家很难理解老师在说什么,那现在呢,我给大家画一个类图。我给大家画一个类图,大家一下就清晰了。我们以哪个为例呢?我们就以工厂模式,用抽象工厂模式来完成前面的披萨项目。
02:05
为例来跟大家画一个类图,大家就一目了然了。那同样道理,我们打开。Eclipse,我们在这里呢,新建。我们在这里新建一个包。好吧,新建一个包,那就在。哪见哈?看一下在这儿。在这建。我们新建一个包。这个包呢,我们把。把它改成叫做抽象工厂。ABS。Abstract,简写。然后呢,这边后面这个就不要了。叫做obstra factory,也是一个披萨店。挖走。那同学们来诶。为什么变成这样子了?这个是什么东西不要了啊,这个不要delete掉。好顶的调,那现在呢,我们在这里新建一个类图。
03:04
我们新建一个类图来看一下。好的同学们,这是个类图,这个类图呢,它有哪些东西呢?首先它仍然会有。各种口味的。披萨,这个是可以,这个是没问题的,我把这块复制过来。我把它直接复制到我们这边来,好各位同学。保存一下,然后呢,我仍然让北京的奶酪披萨,北京的胡椒披萨,伦敦的奶酪披萨,伦敦的胡椒披萨去什么呢?去继承。披萨类。这个没有任何问题。好,然后呢,我要做一个接口。我要做一个接口。呃,大家看一下就一下就明白了,Is。然后呢,Biy,这是我们抽象,这是我们一个接口,这个接口里面呢,我会写一个方法,这个方法呢。我们就叫quiz。
04:02
She creates什么呢?Pizza?然后他返回的当然就是一个披萨了,对不对。OK,那这是一个抽象,这是一个接口,那下面呢,我们会有。这个工厂内来实现这个接口,好,我写这么几个工厂内,一个是北京的。北京的factory。北京的工厂内,这个大家看能理解哈,就是待会一个北京的factory。还有什么呢?各位,还有伦敦的factory,伦敦。Factory。好,这个就没问题了,那我让这两个类去实现,我用这根线实现我们的这个结果,当然它实现其实就是至少要把create披萨这个方法给实现了。那实现以后我们来看一看,用的时候咱们怎么用呢?用的时候大家看我这里仍然会有一个叫order披萨的类。
05:08
Order a,大家看一下order pizza。就是说订购比价,我我这个我这个类呢,只要聚合一个工厂进去就行了。就是聚合一个,因为ABS factory它呢是呃,就是说你这两个工厂子类已经实现了,它所以说在我的这一个。这个什么呢?就是在我的这一个披萨,那order披萨里面呢,我只需要干什么呀,我只需要把。这一个聚合到这里面就可以了,当然所谓把ABS factory的一一个引用聚合到这,其实质就是要么是一个北京factory的实力,要么是伦敦的factor实力,我要用什么东西,我要产生什么样的。就说我要生成什么样口味的披萨,我直接从这个工厂里面取就行了,那我这在关在进行这个聚合的时候呢,我找这个ABS factory游戏,因为你下面的子类都实现了它,所以说我可以通过ABS factory这个接口跟北京factory和伦敦factory发生一个什么样,发生一个依赖这个代码就OK了。
06:21
那当然了,北京factory和伦敦factory呢,他们又分别依赖自己口自己这个口味的,呃,就自己口味的披萨就可以。啊,我会用到它最后代码就变成这样子了。变成这样子了,显然这种方式呢,扩展性也会非常的好,为什么?因为将来我在订购披萨的时候,我可能除了orderder披萨,还有orderder披萨一,Order披萨二,我有很多的店来订购,是不是这样问题就得到解决好,同学们,这个呢,就是我们我们的这一个抽象工厂类的一个说法,大家体会一下工厂。不再是一个了,而是工厂族,那么这个创建实例的这个方法会落在每个子类工厂去用。而我再去。
07:09
要去得到一个披萨的时候呢,我只要聚合一个,或者说我在这里呢,只要去通过这个接口。通过这个接口和我们的呃,某一个具体的呃,工厂子类发生一个依赖就完事了,那这样的好处就是将来呢,我比如有多个奥披萨。我有多个order披萨。比如说这个order披萨二。对吧,我也不管那么多,我只需要让他把这个也是通过这个ABS factory这个接口跟我们下面的某一个具体的工厂之类发生一个关联就可以了。好,这样这个思路呢,就会,呃,也是非常清晰的。好,同学们,那关于抽象工厂模式的一个介绍,呃,同同学们大家就应该明白了,看,再来回头再理解,大家就理解的比较深刻了。抽象工作模式是把简单工厂和工厂方法结合起来,因为怎么体现这句话呢?首先它仍然是简单工厂。
08:12
而方法下沉到各个子类。所以说这就体现是体现出工厂方法模式的特点,第二个我们可以看到,从设计层面呢,呃,它会将工厂抽象成两层,一个是抽象工厂,一个是具体实现的工厂之类,也就是我们刚才在这个图里面看到的这条线。这是一层抽象层。下面是我们的工厂子类,除。有多少,你就可以进行扩展,那么每个工厂呢,管理自己对应的这一个披萨,或者是管理自己对应的类就可以了。还是比较清晰,对不对,还是比较,所以说我说画一个类图比用语言要清晰很多,就是这个道理,如果我用语言来描述,不画这个图,大家可能很难理解,或者说理解的不是那么透,但是有了图呢,我们就更加清晰了。各位那关于工厂模式的一个介绍,以及我们准备用工厂模式来完成P项目的一个思路分析呢,就到这里,下面我们准备用代码给大家实现一把。
我来说两句