Java 23种设计模式之抽象工厂模式详解

来源:互联网 发布:剑3捏脸数据 编辑:程序博客网 时间:2024/06/04 18:40

        上周发表了工厂模式,接下来给大家讲解一下抽象工厂模式。

可能很多人对设计模式不以为然,但是我想说的是,一个不懂设计模式的人,就做不了一个优秀的架构师,就看不懂优秀的程序设计,看不懂优秀的框架源码,根本不懂别人为什么会那么设计,为什么那样写,只有你看懂了设计模式,能够融会贯通的时候,为什么很多人即使别人给他讲了设计理论知识,可是还是苦于无法动手,不知道如何实现?归根结底就是自己内心中没有一个设计思想,熟话说思想决定行为,所有我觉得想要成为一个优秀的程序设计者,或者是架构师,设计模式对大家是非常重要的,好了废话不多说了,我把个人所学到的一些知识给大家分享一下,希望能对大家有所帮助,有疑问的,或者有更好的想法,大家可以一起交流。

        在讲设计模式之前,我想问一下大家抽象工厂模式-与-工厂方法模式区别?

有一个人的博客解释的很有道理,在这里我给大家分享一下:

工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类

抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类

       个人觉得这个区别在于产品,如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的。

再来看看工厂方法模式与抽象工厂模式对比:

 

工厂方法模式

抽象工厂模式

针对的是一个产品等级结构针对的是面向多个产品等级结构一个抽象产品类多个抽象产品类可以派生出多个具体产品类每个抽象产品类可以派生出多个具体产品类一个抽象工厂类,可以派生出多个具体工厂类一个抽象工厂类,可以派生出多个具体工厂类每个具体工厂类只能创建一个具体产品类的实例每个具体工厂类可以创建多个具体产品类的实例

                                  

举个例子说明下:

用种蔬菜的例子来说明事实,最初的时候,由于规模小,只种植一种蔬菜,根菜类蔬菜,这个时候由于种植方式比较简单,采用简单工厂模式即可,主要目的是让工人轻松,下达工厂种植即可,但是随着种植厂的发展以及市场的需求,要增加一种蔬菜类型种植了,茎菜,由于茎菜与根菜种植方式不一致,就需要两个专门的种植工厂来进行管理,那么久采用工厂模式来管理,一个工厂负责一种作物的种植,这个时候产品可以理解为仍然在一个层次。但是随着科技的发展,我们逐步要种植转基因与非转基因食品了,在以前的蔬菜种类上又增加了一个层次,这个时候无法将其作为一个层次来解决,所以必须采用抽象工厂的方式来解决。我用UML图表示三种结构:



1

 11    上面的UML图很明显的就看出来了,抽象工厂可以创建多个产品类对象,如在种菜工厂中,有种根菜,种茎菜。工厂模式与抽象工厂模式以及简单工厂模式只有在具体应用的时候,分析具体的产品层级,然后选择相应的设计模式。

    而在没一个层次,种菜工人所关心的对象也不一样,在简单工厂模式下,工人要想到种植萝卜还是白菜,在工厂模式下,工人想到是种植根菜还是茎菜,而在抽象工厂模式下,则关心种植基因菜还是非基因菜。

总结一句话:抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的,抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。

接下来我分享一下源码:


由于源码不好上传,如有兴趣的朋友可以留下邮箱地址:我给大家发过去。



1

 11    上面的UML图很明显的就看出来了,抽象工厂可以创建多个产品类对象,如在种菜工厂中,有种根菜,种茎菜。工厂模式与抽象工厂模式以及简单工厂模式只有在具体应用的时候,分析具体的产品层级,然后选择相应的设计模式。

    而在没一个层次,种菜工人所关心的对象也不一样,在简单工厂模式下,工人要想到种植萝卜还是白菜,在工厂模式下,工人想到是种植根菜还是茎菜,而在抽象工厂模式下,则关心种植基因菜还是非基因菜

0 0