工厂模式抽象工厂

     工厂模式抽象工厂   简单工厂模式和工厂模式说法正确的是   什么是抽象工厂模式   1. 可以这么去理解,“抽象工厂模式”这个称呼中的“抽象”是一个动词,即对工厂方法模式进行了抽象,就变成了抽象工厂模式,这么理解后,就不难看出它们的区别:抽象工厂模式和工厂方法模式...

  

  工厂模式抽象工厂

  简单工厂模式和工厂模式说法正确的是

  什么是抽象工厂模式

  1. 可以这么去理解,“抽象工厂模式”这个称呼中的“抽象”是一个动词,即对工厂方法模式进行了抽象,就变成了抽象工厂模式,这么理解后,就不难看出它们的区别:抽象工厂模式和工厂方法模式

  2. 工厂方法模式:每个抽象产品派生多个具体产品类,每个抽象工厂类派生多个具体工厂类,每个具体工厂类负责一个具体产品的实例创建简单工厂模式和工厂方法模式和抽象工厂;

  3. 抽象工厂模式:每个抽象产品派生多个具体产品类,每个抽象工厂派生多个具体工厂类,每个具体工厂负责多个(一系列)具体产品的实例创建简单工厂模式和工厂方法模式和抽象工厂。

  4. 你在下面所说的一句话“抽象工厂的具体工厂经常实现工厂方法来创建他的产品”,这句话里面的“工厂方法”仅仅是对一类方法的称呼,此处的“工厂方法”与“工厂方法模式”无关,即便在简单工厂模式中,也会有工厂方法这一说抽象工厂模式是简单工厂模式的升级版本。

  工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面。在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的代码工厂模式和抽象工厂模式的本质区别是什么意思工厂模式分为( ),(工厂方法),(抽象工厂)三种类型。而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加if/else分支,或者增加一个case分支,工厂模式符合软件开发中的OCP原则(open close ),对扩展开放,对修改关闭

  1、抽象工厂模式:这个模式我总是感觉和builder模式非常相似。

  工厂方法模式提供的是对一个产品的等级模式,,而抽象工厂方法提供的是对多个产品的等级模式,注意,这里的多个具体产品之间是相互耦合的,也就是说这里的抽象工厂提供的产品之间是存在某种联系的抽象工厂和工厂模式的区别 简书。

  

  有人做如下的比较:

  

  工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。

  2、一个抽象工厂类,可以派生出多个具体工厂类。

  每个具体工厂类只能创建一个具体产品类的实例。

  抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

  一个抽象工厂类,可以派生出多个具体工厂类。

  3、每个具体工厂类可以创建多个具体产品类的实例。

  区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。

  工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

  下面是一个形象的比喻:

  4、无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。拿一个生产水杯(cup)的工厂举例:起初,不用工厂模式,我必须在生产水杯之前知道水杯的材料和形状等水杯的所有特征才能生产,这就是我们的new Cup();这个Cup必须是具体的。厂主发现同一形状的被子,只是材料不同,如一个是玻璃(glass)的,一个是瓷(china)的,但是确要两条生产线,显然有资源浪费的嫌疑。现在厂主生产杯子时先不让生产线知道我要产的是玻璃的还是瓷的,而是让它在不知道具体材料的情况下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形状的具体杯子了抽象工厂属于什么型模式。但是很可惜,java并不能new一个抽象的Cup,所以就有了简单工厂模式。原来是Cup cup=new Cup;现在是.(String cupName),根据cup的名字生产Cup,而返回的是一个实现了 Cup接口或抽象类的具体Cup。简单抽象工厂模式有一个问题,就是当我现在想生产一个同样形状的铁杯时,工厂里并没有定义相应的处理流程,只能更改方法,这就不合理了工厂模式和抽象工厂模式的本质区别是什么意思。我现在只是想生产铁杯,你只要在最后的时候把玻璃原料换成铁的不就行了吗,干嘛还要更改整条生产线呢?于是就有了工厂模式。原来生产线在生产模具的时候还要考虑是为玻璃杯生产的模具还是为铁杯生产的模具,现在它不用管了。.()创建Cup.是接口或抽象类。实现它的具体子类会创建符合Cup接口的具体Cup工厂模式分为( ),(工厂方法),(抽象工厂)三种类型。那么现在厂主想要生产水壶(kettle),用工厂模式就不得不再造一条水壶生产线,能不能在水杯生产线同时生产水壶呢?这就是抽象工厂模式工厂模式和抽象工厂模式的本质区别是什么。

  首先来看看这两者的定义区别:

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

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

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

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

  2、工厂方法模式

  抽象工厂模式

  针对的是一个产品等级结构针对的是面向多个产品等级结构

  一个抽象产品类多个抽象产品类

  3、可以派生出多个具体产品类每个抽象产品类可以派生出多个具体产品类

  一个抽象工厂类,可以派生出多个具体工厂类一个抽象工厂类,可以派生出多个具体工厂类

  每个具体工厂类只能创建一个具体产品类的实例每个具体工厂类可以创建多个具体产品类的实例

  相信看完以上的内容,大家对于工厂模式抽象工厂以及其他几个相关问题都有了比较全面且深刻的理解。如果大家还有不明白的地方,欢迎后台留言。

本文来自互联网,如有侵权,联系删除