工厂方法:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。 在工厂里面可以对对象的创建做严格的定义,client端直接通过工厂创建出来就可以使用了。拥有多个工厂的方式我们称为多工厂方法模式,如果只有一个工厂我们可以去掉抽象类直接定义一个static(用static修饰可以不用初始化工厂直接返回产品,也可以不用static)的方法返回对象,这种叫做简单工厂或者静态工厂模式优点和缺点是一样的:新加一个产品需要相应的产品类和一个工厂子类。
抽象工厂:
为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定他们的具体实现类。
例如:
Q3和Q7有不同的轮胎、发动机、制动系统。虽然生产的零件不同,型号不同。但是根本上都有共同的约束,就是轮胎、发动机、制动系统。设计如下:
需要一个抽象工厂,里面有三个接口分别为生产轮胎、发动机、制动系统,抽象类
需要三个抽象产品分别为轮胎、发动机、制动系统,抽象接口
需要实现上面的三个抽象接口,定义出每个接口不通的对象,比如:普通轮胎和越野轮胎
需要两个具体类继承自上面的抽象类,实现具体的工厂,比如:生产Q3的工厂和生产Q7的工厂
在客户端new出对应的具体工厂并调用对应的生产方法
区别:
工厂方法模式: 只有一个抽象产品类,具体工厂类只能创建一个具体产品类的实例
抽象工厂模式: 有多个抽象产品类 ,具体工厂类能创建多个具体产品类的实例