概念
为创建一组相关联或相互依赖的对象提供一个接口,而不需指定它们的具体类。与之前的工厂方法模式区别是抽象工厂有多个,并且每个具体工厂可以创建多个产品。优点是分离接口与实现,让客户端面向接口编程。缺点也是工厂类过多要谨慎;还有也不太好扩展产品因为增加一个产品就需要修改抽象工厂。
使用场景
一组产品有同一系列的部件,但相同部件之间的种类有很多差别(如尺寸大,中,小等)
实现方式
- Factory 抽象工厂:声明一组创建每种产品的方法(比如A,B)
- Factory1 Factory2 具体工厂:生产一组具体产品,这些产品构成一个产品种类(比如Factory1生产小A,小B,Factory生产大A,大B)
- ProductA ProductB 抽象产品:
- ProductA1 ProductA2 ProductB1 ProductB2 具体产品
public abstract class ProductA{
}
public abstract class ProductB{
}
public class ProductA1 extends ProductA {
}
public class ProductA2 extends ProductA {
}
public class ProductB1 extends ProductB {
}
public class ProductB2 extends ProductB {
}
public abstract class Factory{
public abstract ProductA createProductA();
public abstract ProductB createProductB();
}
public class Factory1 extends Factory{
public ProductA createProductA(){
return new ProductA1();
}
public ProductB createProductB(){
return new ProductB1();
}
}
public class Factory2 extends Factory{
public ProductA createProductA(){
return new ProductA2();
}
public ProductB createProductB(){
return new ProductB2();
}
}