- 提供一个用来创建一个产品家族的抽象类型,该类型的子类定义产品被生产的方法。
- 想使用工厂,必须先实例化它,然后将它传入一些针对抽象类型所编写的代码中。是否有多个产品创建单一产品(通常是一个具体的类)创建多个相关产品,产品之间通常有依赖关系,属于同一产品族扩展性如果需要新产品,可以通过继承和重写工厂方法来实现新类型的创建扩展产品族时,可能需要修改抽象工厂的接口,增加或改变产品接口,但可以通过新子类来应对不同产品族的需求代码结构客户端通过工厂方法来创建产品,工厂方法通常在具体类中实现客户端通过抽象工厂来获得产品,工厂方法在不同的子工厂类中实现使用类 vs 使用对象使用具体的工厂类,通过继承来扩展产品创建方式,客户端依赖于工厂类的继承层次使用抽象工厂接口,通过组合多个相关产品对象来创建产品家族,客户端依赖于工厂接口而不是具体实现继承 vs 对象组合依赖于继承来实现产品的创建,不同的具体工厂类通过继承抽象工厂来实现不同的创建方法依赖于对象组合来实现产品的创建,不同的具体工厂类实现抽象工厂接口,并通过组合多个产品来实现产品创建使用时机当只需要创建单一产品,且可能需要在未来扩展或修改具体产品的创建方式时,使用工厂方法当需要创建多个相关的产品,且这些产品有共同的特性或属于同一产品家族时,使用抽象工厂模式采用工厂方法: