抽象工厂模式实际就是工厂方法模式的再改进,我们先简单聊聊工厂方法模式:
工厂方法模式将工厂抽象,实现多种工厂,每种工厂负责生产一种产生,其中所有产生都属于同一类。也就是说工厂方法模式虽然包含多个工厂,但同时只能生产一类商品。对应到 Java 代码就是,抽象工厂模式只能生产某个父类或抽象接口下的所有对象。
为了解决工厂方法模式只能生产一类商品,提出抽象工厂模式:
public class AbstractFactory {
public interface ProductA {
}
public static class ProductA1 implements ProductA {
public ProductA1() {
System.out.println("ProductA1 - 被生产");
}
}
public static class ProductA2 implements ProductA {
public ProductA2() {
System.out.println("ProductA2 - 被生产");
}
}
public interface ProductB {
}
public static class ProductB1 implements ProductB {
public ProductB1() {
System.out.println("ProductB1 - 被生产");
}
}
public static class ProductB2 implements ProductB {
public ProductB2() {
System.out.println("ProductB2 - 被生产");
}
}
public interface Factory {
public ProductA createProductA();
public ProductB createProductB();
}
public static class FactoryA implements Factory {
@Override
public ProductA createProductA() {
return new ProductA1();
}
@Override
public ProductB createProductB() {
return new ProductB1();
}
}
public static class FactoryB implements Factory {
@Override
public ProductA createProductA() {
return new ProductA2();
}
@Override
public ProductB createProductB() {
return new ProductB2();
}
}
}
如上就是抽象工厂模式的代码结构,相比工厂方法模式,它具有以下优点:
- 工厂可以生产多种不同类商品
- 对于客户端来说,获得某工厂类后,可以获得该族所有产品
- 工厂和商品的一对一绑定关系断开,不在需要为每一类商品单独创建工厂类,可扩展性更强