目录
1.简介
抽象工厂模式是为创建一组相关或相互依赖的对象提供的一个接口,并且无需指定具体的类。很明显,它是工厂模式的升级版。之前的工厂模式一个工厂就可以了,现在有种情况是工厂模式无法满足的,就是如果产品之间具有一种相互关系,就只能用抽象工厂模式了。
2.优点
同样是具有了很好的封装性,并且产品之间的相互关系将处于一种非公开的状态。
3.缺点
横向扩展容易,纵向扩展困难。横向扩展是从源头开始扩展,即从产品进行扩展,再新建工厂组装,符合开闭原则;而纵向扩展是需要修改工厂接口,对其中的方法进行更改,这严重违法了开闭原则。
4.形式
这里以两种产品的交互展开,抽象A产品类
public abstract class AProductA {
public void shareMethod(){}
public void ownMethod(){}
}
抽象A产品类1实现
public class ProductA1 extends AProductA {
public void ownMethod() {
System.out.println("A1产品");
}
}
抽象A产品类2实现
public class ProductA2 extends AProductA {
public void ownMethod() {
System.out.prinln("A2产品");
}
}
抽象B产品类
public abstract class AProductB {
public void shareMethod(){}
public void ownMethod(){}
}
抽象B产品类1实现
public class ProductB1 extends AProductB {
public void ownMethod() {
System.out.println("B1产品");
}
}
抽象B产品类2实现
public class ProductB2 extends AProductB {
public void ownMethod() {
System.out.prinln("B2产品");
}
}
抽象工厂类
public abstract class AFactory {
public abstract AProductA makeProductA();
public abstract AProductB makeProductB();
}
A工厂的做法是
public class FactoryA extends AFactory {
public AProductA makeProductA() {
return new ProductA1();
}
public AProductB makeProductB() {
return new ProductB1();
}
}
B工厂的做法是
public class FactoryB extends AFactory {
public AProductA makeProductA() {
return new ProductA2();
}
public AProductB makeProductB() {
return new ProductB2();
}
}