抽象工厂模式

798 阅读1分钟

概念

为创建一组相关联或相互依赖的对象提供一个接口,而不需指定它们的具体类。与之前的工厂方法模式区别是抽象工厂有多个,并且每个具体工厂可以创建多个产品。优点是分离接口与实现,让客户端面向接口编程。缺点也是工厂类过多要谨慎;还有也不太好扩展产品因为增加一个产品就需要修改抽象工厂。

使用场景

一组产品有同一系列的部件,但相同部件之间的种类有很多差别(如尺寸大,中,小等)

实现方式

  • 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();
    }
}