描述:有多种产品,一个工厂负责创建所有类型的产品
角色:
AbstractFactory:用于声明生成抽象产品的方法
ConcreteFactory:实现了抽象工厂声明的生成抽象产品的方法,生成一组具体产品,这些产品构成了一个产品族;
AbstractProduct:每种类型产品的接口,种类多少种接口就多少个
Product:一种类型产品底下的多种产品
//产品族的抽象类
public abstract class AbstractProductA {
//每个产品共有的方法
public void shareMethod() {
}
// 每个产品相同方法,不同实现
public abstract void doSomething();
}
public abstract class AbstractProductB {
//每个产品共有的方法
public void shareMethod() {
}
// 每个产品相同方法,不同实现
public abstract void doSomething();
}
//两个产品族的具体实现类
public class ProductA1 extends AbstractProductA {
public void doSomething() {
System.out.println("我是产品A1");
}
}
public class ProductA2 extends AbstractProductA {
public void doSomething() {
System.out.println("我是产品A2");
}
}
public class ProductB1 extends AbstractProductB {
public void doSomething() {
System.out.println("我是产品B1");
}
}
public class ProductB2 extends AbstractProductB {
public void doSomething() {
System.out.println("我是产品B2");
}
}
//抽象工厂类
public abstract class AbstractCreator {
//创建A产品
public abstract AbstractProductA createProductA();
//创建B产品
public abstract AbstractProductB createProductB();
}
//具体工厂
public class Creator1 extends AbstractCreator {
public AbstractProductA createProductA() {
return new ProductA1();
}
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class Creator2 extends AbstractCreator {
public AbstractProductA createProductA() {
return new ProductA2();
}
public AbstractProductB createProductB() {
return new ProductB2();
}
}