工厂就是用来创造东西。编程
提供了一个建立对象实例的功能,而不关心具体的实现细节。spa
不须要建立工厂实例,方法为静态设计
定义一个建立对象的接口,让子类决定实例化哪个类,工厂方法使一个对象的实例化延迟到子类。对象
在父类不知道具体实现的状况下,完成自身的功能调用,具体的实现由子类完成。设计的时候不须要考虑具体的实现,须要哪一个对象在,经过工厂方法返回就能够。blog
实现:接口
工厂方法的实现,通常是定义一个抽象类,包含建立对象所需的抽象方法则为工厂方法。也能够实现为具体的类,这样就会有一个默认的方法,子类去覆盖这个方法,为子类提供挂钩。产品
在工厂方法模式里,要么使用Creator对象,要么使用Creator建立出来的对象, 一版客户端不会直接使用工厂方法。扩展
提供一个建立一系列相关或相互依赖的接口,而无需指定他们具体须要实现的类配置
为一系列相关对象或相互依赖的对象,建立一个接口。方法
工厂方法的本质是用来选择实现的,跟简单工厂的区别在于工厂方法的实现是延迟到子类的。若是把工厂方法的实现放到父类直接实现就至关于简单工厂。
简单工厂用来选择实现,能够选择任意接口的实现,一个工厂能够用于选择和建立多个个对象,可是这多个对象之间是没有联系的。
抽象工厂是用来选择产品簇的实现,抽象工厂有多个方法来选择并建立对象,这些对象之间一般是有关系的。若是抽象工厂只有一个实现,不分层次,则至关于简单工厂。
这两个模式既有区别也有联系,能够组合使用。工厂方法模式是针对单独的产品的建立,而抽象工厂针对产品簇的建立,抽象工厂能够退化成工厂方法,工厂方法能够退化成简单工厂。
在抽象工厂的实现中,可使用简单工厂来提供抽象工厂的具体实现,能够这么组合使用。