定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类**

    1. package net;
    2. interface ProductA {
    3. void methodA();
    4. }
    5. interface ProductB {
    6. void methodB();
    7. }
    8. class ProductA1 implements ProductA{
    9. public void methodA() {
    10. System.out.println("产品A系列中1型号产品的方法");
    11. }
    12. }
    13. class ProductA2 implements ProductA{
    14. public void methodA() {
    15. System.out.println("产品A系列中2型号产品的方法");
    16. }
    17. }
    18. class ProductB1 implements ProductB{
    19. public void methodB() {
    20. System.out.println("产品B系列中1型号产品的方法");
    21. }
    22. }
    23. class ProductB2 implements ProductB{
    24. public void methodB() {
    25. System.out.println("产品B系列中2型号产品的方法");
    26. }
    27. }

    工厂接口

    1. package net;
    2. public interface Creator {
    3. ProductA createProductA();
    4. ProductB createProductB();
    5. }

    工厂实现

    1. package net;
    2. public class ConcreteCreator1 implements Creator{
    3. public ProductA createProductA() {
    4. return new ProductA1();
    5. }
    6. public ProductB createProductB() {
    7. return new ProductB1();
    8. }
    9. }
    10. package net;
    11. public class ConcreteCreator2 implements Creator{
    12. public ProductA createProductA() {
    13. return new ProductA2();
    14. }
    15. public ProductB createProductB() {
    16. return new ProductB2();
    17. }
    18. }

    测试

    package net;
    
    
    public class Client {
    
        public static void main(String[] args) throws Exception {
            Creator creator = new ConcreteCreator1();
            ProductA productA = creator.createProductA();
            ProductB productB = creator.createProductB();
            productA.methodA();
            productB.methodB();
    
            creator = new ConcreteCreator2();
            productA = creator.createProductA();
            productB = creator.createProductB();
            productA.methodA();
            productB.methodB();
        }
    }
    

    基于抽象工厂一旦定义,抽象产品的个数就已经固定,所以最好在抽象产品的个数不太会变化的情况下使用抽象工厂模式,当然,我们可以使用继承去弥补抽象工厂模式的这一不足,创造另外一个继承体系去扩展现有的框架。