public abstract class AbstractProductA {
public void shareMethod(){}
public abstract void doSomething();
}
public abstract class AbstractProductB {
public void shareMethod(){}
public abstract void doSomething();
public abstract void b();
}
public class ProductA1 extends AbstractProductA {
@Override
public void doSomething() {
System.out.println("产品A1的实现");
}
}
public class ProductA2 extends AbstractProductA {
@Override
public void doSomething() {
System.out.println("产品A2的实现");
}
}
public class ProductA3 extends AbstractProductA {
@Override
public void doSomething() {
System.out.println("产品A3的实现");
}
}
public class ProductB1 extends AbstractProductB {
@Override
public void doSomething() {
System.out.println("产品B1的实现");
}
@Override
public void b() {
System.out.println("B1特有功能");
}
}
public class ProductB2 extends AbstractProductB {
@Override
public void doSomething() {
System.out.println("产品B2的实现");
}
@Override
public void b() {
System.out.println("B2特有功能");
}
}
public class ProductB3 extends AbstractProductB {
@Override
public void doSomething() {
System.out.println("产品B3的实现");
}
@Override
public void b() {
System.out.println("B3特有功能");
}
}
public abstract class AbstractCreator {
public abstract AbstractProductA abstractProductA();
public abstract AbstractProductB abstractProductB();
}
public class CreatorFreeImpl extends AbstractCreator {
@Override
public AbstractProductA abstractProductA() {
return new ProductA3();
}
@Override
public AbstractProductB abstractProductB() {
return new ProductB3();
}
}
public class CreatorOneImpl extends AbstractCreator {
@Override
public AbstractProductA abstractProductA() {
return new ProductA1();
}
@Override
public AbstractProductB abstractProductB() {
return new ProductB1();
}
}
public class CreatorTwoImpl extends AbstractCreator {
@Override
public AbstractProductA abstractProductA() {
return new ProductA2();
}
@Override
public AbstractProductB abstractProductB() {
return new ProductB2();
}
}
public class Main {
public static void main(String[] args) {
CreatorOneImpl creatorOne = new CreatorOneImpl();
CreatorTwoImpl creatorTwo = new CreatorTwoImpl();
AbstractProductA productA = creatorOne.abstractProductA();
AbstractProductB productB = creatorTwo.abstractProductB();
productA.doSomething();
productB.doSomething();
productB.b();
CreatorFreeImpl creatorFree = new CreatorFreeImpl();
AbstractProductA productA1 = creatorFree.abstractProductA();
AbstractProductB productB1 = creatorFree.abstractProductB();
productA1.doSomething();
productB1.doSomething();
productB1.b();
}
}