Factory Method defines an interface for creating an object, but lets subclasses decide which of those to instantiate. A factory method lets classes defer instantiation to subclasses.
By contrast, an Abstract Factory provides an interface for creating families of related or dependent objects without specifying their concrete classes.
这个说明摘自stackoverflow 翻译下
方法工厂顶一个生成对象的接口,但是让自打雷去决定哪个去实例化产品 上一篇博文说的 我们有一个抽象工厂 有抽象工厂的实现类 具体是BlueColor 还是RedColor 有2个工厂的实现类去实现 。工厂方法让类的实例化由之类决定
相比之下 ,抽象工厂 提供了一个接口 去创建 有关系或者相互依赖的产品家族。 不需要指定他们得聚合类 这个怎么解释:
就是我不需要 多个工厂去生成多个产品 2个产品不是用2个工厂类 但是方法工厂需要
我一个工厂就可以干这件事
本质上 方法工厂是不是抽象工厂的特殊形式 就是我就一个产品
静态工厂:
简单工厂:
工厂方法:
抽象工厂 :
The intent of Factory Method is "Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses."
The intent of Abstract Factory is "Provide an interface for creating families of related or dependent objects without specifying their concrete classes."
AbstractFactory only declares an interface for creating products. It's up to ConcreteProduct subclasses to actually create them. The most common way to do this is to define a factory method for each product.
抽象工厂姿势定义一个创建产品的接口 有具体产品角色的之类去真正的创建他们 最常用的方法是顶一个工厂方法去创建他们
简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。简单工厂模式结构比较简单,其核心是工厂类的设计,其结构如图1所示:
方法工厂模式:
(1) 在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,有更多的类需要编译和运行,会给系统带来一些额外的开销。
(2) 由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。
下面说工厂方法模式的缺点 当有三个产品需要构建的时候你会发现你需要太多的类,三种产品 你需要三个产品工厂 要是这三个产品还有特殊的定义 你需要的就更多了 。
比如颜色 Color 抽象产品类 三个演示实现 比如 黄色 蓝色 紫色 现在又增加三个 而且还是 深黄色 浅黄色 深蓝色 浅蓝色 深紫色 浅则色 你就发现无能为力了
这时候就需要:
(1) 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。
(2) 产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中,海尔电视机、海尔电冰箱构成了一个产品族。
本质上的问题 就是深和浅是就是一个 产品族的概念 多了一层抽象