//抽象产品类A
public abstract class AbstractProductA {
//每个产品共有方法
public void commonMethod(){}
//每个产品相同方法,不同实现
public abstract void doSomething();
}
//等级为1的产品A的实现类
public class ProductA1 extends AbstractProductA{
public void doSomething(){
System.out.println("产品A1的实现方法");
}
}
//等级为2的产品A的实现类
public class ProductA2 extends AbstractProductA{
public void doSomething(){
System.out.println("产品A2的实现方法");
}
}
//抽象产品类B
public abstract class AbstractProductB {
//每个产品共有方法
public void commonMethod(){}
//每个产品相同方法,不同实现
public abstract void doSomething();
}
//等级为1的产品B的实现类
public class ProductB1 extends AbstractProductB{
public void doSomething(){
System.out.println("产品B1的实现方法");
}
}
//等级为2的产品B的实现类
public class ProductB2 extends AbstractProductB{
public void doSomething(){
System.out.println("产品B2的实现方法");
}
}
//抽象工厂
public abstract class AbstractFactory {
//创建A产品家族
public abstract AbstractProductA createProductA();
//创建B产品家族
public abstract AbstractProductB createProductB();
}
//具体工厂类1
public class Factory1 extends AbstractFactory{
//只生产等级为1的A产品
public AbstractProductA createProductA() {
return new ProductA1();
}
//只生产等级为1的B产品
public AbstractProductB createProductB() {
return new ProductB1();
}
}
//具体工厂类2
public class Factory2 extends AbstractFactory{
//只生产等级为2的A产品
public AbstractProductA createProductA() {
return new ProductA2();
}
//只生产等级为2的B产品
public AbstractProductB createProductB() {
return new ProductB2();
}
}
public class Main {
public static void main(String[] args) {
//不同工厂
AbstractFactory factory1 = new Factory1();
AbstractFactory factory2 = new Factory2();
//产品A
AbstractProductA a1 = factory1.createProductA();
AbstractProductA a2 = factory2.createProductA();
//产品B
AbstractProductB b1 = factory1.createProductB();
AbstractProductB b2 = factory2.createProductB();
}
}
有M个产品等级就应该有M个工厂类,每个实现工厂负责不同产品族的生产。