工厂模式:定义一个用于建立对象的接口,让子类决定实例化哪个类设计模式
抽象工厂模式:为建立一组相关或相互依赖的对象提供一个接口,并且无需指定他们的具体类spa
我的以为这个区别在于产品,若是产品单一,最合适用工厂模式,可是若是有多个业务品种、业务分类时,经过抽象工厂模式产生须要的对象是一种很是好的解决方 式。再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的。.net
再来看看工厂方法模式与抽象工厂模式对比:设计
工厂方法模式对象 |
抽象工厂模式接口 |
针对的是一个产品等级结构 | 针对的是面向多个产品等级结构 |
一个抽象产品类 | 多个抽象产品类 |
能够派生出多个具体产品类 | 每一个抽象产品类能够派生出多个具体产品类 |
一个抽象工厂类,能够派生出多个具体工厂类 | 一个抽象工厂类,能够派生出多个具体工厂类 |
每一个具体工厂类只能建立一个具体产品类的实例 | 每一个具体工厂类能够建立多个具体产品类的实例 |
用种蔬菜的例子来讲明事实,最初的时候,因为规模小,只种植一种蔬菜,根菜类蔬菜,这个时候因为种植方式比较简单,采用简单工厂模式便可,主要目的 是让工人轻松,下达工厂种植便可,可是随着种植厂的发展以及市场的需求,要增长一种蔬菜类型种植了,茎菜,因为茎菜与根菜种植方式不一致,就须要两个专门 的种植工厂来进行管理,那么久采用工厂模式来管理,一个工厂负责一种做物的种植,这个时候产品能够理解为仍然在一个层次。可是随着科技的发展,咱们逐步要 种植转基因与非转基因食品了,在之前的蔬菜种类上又增长了一个层次,这个时候没法将其做为一个层次来解决,因此必须采用抽象工厂的方式来解决。我用UML 图表示三种结构:ci
上面的UML图很明显的就看出来了,抽象工厂能够建立多个产品类对象,如在种菜工厂中,有种根菜,种茎菜。工厂模式与抽象工厂模式以及简单工厂模式只有在具体应用的时候,分析具体的产品层级,而后选择相应的设计模式。get
而在没一个层次,种菜工人所关心的对象也不同,在简单工厂模式下,工人要想到种植萝卜仍是白菜,在工厂模式下,工人想到是种植根菜仍是茎菜,而在抽象工厂模式下,则关心种植基因菜仍是非基因菜产品