一、工厂模式(Factory):通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的,工厂方法让类的实例化推迟到子类
(1)涉及角色:抽象产品,具体产品,抽象创建者,具体创建者。
(2)实例:
抽象产品类
public abstract class ProductNoodle {
public abstract String description();
}
具体产品类
public class ConcreteNoodleA extends ProductNoodle { @Override
public String description() {
return "加葱的面条";
} }
public class ConcreteNoodleB extends ProductNoodle { @Override
public String description() {
return "加蒜的面条";
} }
抽象工厂类
public abstract class NoodleFactory {
public abstract ProductNoodle createNoodle(String type);
}
具体工厂类
public class ConcreteFactoryA extends NoodleFactory { @Override
public ProductNoodle createNoodle(String type) {
if("A".equals(type)){
return new ConcreteNoodleA();
}
if("B".equals(type)){
return new ConcreteNoodleB();
}
return null;
} }
最后客户端直接调用工厂方法产生产品。可以按需求决定使用的具体工厂为哪个。
二、抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产品的具体产品是什么,这样客户就从具体的产品中解耦出来。
涉及角色:抽象产品,具体产品,抽象创建者,具体创建者。
三、工厂模式和抽象工厂区别:
(1)工厂方法使用的是继承,抽象工厂方法使用的组合。
(2)工厂方法:通过子类来创建对象,这种做法,客户只需要知道他们使用的是抽象类就可以了,而由子类负责创建具体类型。
抽象工厂:提供一个用来创建一个产品家族的抽象类型,这个类型的子类定义了产品被产生的方法,要使用这个工厂,必须先实例化。然后传入抽象类型的代码中。