模式 / 创建型模式
image

//abstract factory
interface IFactory {
    IProductA createA();
    IProductB createB();
}

//concrete factory 1
class Factory1 implements IFactory {
    public IProductA createA() {
        return new ProductA1();
    }
    public IProductB createB() {
        return new ProductB1();
    }
}

//concrete factory 2
class Factory2 implements IFactory {
    public IProductA createA() {
        return new ProductA2();
    }
    public IProductB createB() {
        return new ProductB2();
    }
}

//abstract product A
interface IProductA {
    void testA();
}

//abstract product B
interface IProductB {
    void testB();
}

//concrete product A1
class ProductA1 implements IProductA {
    public void testA() {
        System.out.println("test A1");
    }
}

//concrete product A2
class ProductA2 implements IProductA {
    public void testA() {
        System.out.println("test A2");
    }
}

//concrete product B1
class ProductB1 implements IProductB {
    public void testB() {
        System.out.println("test B1");
    }
}

//concrete product B2
class ProductB2 implements IProductB {
    public void testB() {
        System.out.println("test B2");
    }
}

//client code
void testFactory(IFactory factory) {
    var productA = factory.createA();
    var productB = factory.createB();
    productA.testA();
    productB.testB();
}

testFactory(new Factory1());
//printed: test A1
//         test B1
testFactory(new Factory2());
//printed: test A2
//         test B2