简单工厂的好处:

       .将new封装起来,new 的过程可能很复杂(new A(1,2,3,4,5,6,7)),当多处需要new的时候就会比较麻烦,而且当new的代码需要变动的时候就

需要修改多个地方(每处new的都要改),工厂模式能new封装起来,当new需要修改的时候,只需要在工厂出修改代码,而无需修该工厂的接口。


何时选择简单工厂:
       1.如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可以选用简单工厂,让客户端通过工厂来获取相应的接口,而无须关心具体的实现。
       2.如果想要把对外创建对象的职责集中管理和控制,可以选择用简单工厂,一个简单工厂可以创建很多的,不相关的对象,可以把对外创建对象的职责集中到一个简单工厂来,从而实现集中管理和控制。

简单工厂:

一个抽象产品类,可派生多个具体产品类

一个具体工厂类,可创建多个具体产品类的实例。


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

抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。   
一个抽象工厂类,可以派生出多个具体工厂类。   
每个具体工厂类可以创建多个具体产品类的实例。   
    
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。   
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

工厂方法创建一般只有一个方法,创建一种产品。

  抽象工厂一般有多个方法,创建一系列产品。

  目的不一样

  工厂方法创建 "一种" 产品,他的着重点在于"怎么创建",也就是说如果你开发,你的大量代码很可能围绕着这种产品的构造,初始化这些细节上面。也因为如此,类似的产品之间有很多可以复用的特征,所以会和模版方法相随。

  抽象工厂需要创建一些列产品,着重点在于"创建哪些"产品上,也就是说,如果你开发,你的主要任务是划分不同差异的产品线,并且尽量保持每条产品线接口一致,从而可以从同一个抽象工厂继承。

  一、简单工厂

  简单工厂模式中工厂为具体工厂,产品为抽象产品,由工厂实例创建产品实例。

  二、工厂方法

  工厂方法中有抽象的工厂类,一种抽象的产品类,而工厂类中仅创建此抽象产品类的实例,具体产品实例由具体的工厂类创建。

  三、抽象工厂

  抽象工厂创建多类产品,可将这些产品理解为一套相关的产品,由工厂在创建时一起创建,每类产品有不同的实例。实践中一般会用反射来创建工厂的实例,配合配置文件或依赖注入容器来避免创建不同产品时还需要修改客户端代码,即符合“修改封闭,扩展开放原则”,一点拙见,欢迎指正。