简单工厂和工厂方法以及抽象工厂模式

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

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

       我的以为这个区别在于产品,若是产品单一,最合适用工厂模式,可是若是有多个业务品种、业务分类时,经过抽象工厂模式产生须要的对象是一种很是好的解决方 式。再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的。.net

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

 

工厂方法模式对象

抽象工厂模式接口

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


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

1

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

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

相关文章
相关标签/搜索