抽象工厂模式为创建一组相关的或相互依赖的对象提供一个接口,而无需指定它们具体类。
抽象工厂是一个父类工厂,可以创建其它工厂类。故我们也叫它“工厂的工厂”。
代码示例:
interface CPU {
void process();
}
interface CPUFactory {
CPU produceCPU();
}
class AMDFactory implements CPUFactory {
public CPU produceCPU() {
return new AMDCPU();
}
}
class IntelFactory implements CPUFactory {
public CPU produceCPU() {
return new IntelCPU();
}
}
class AMDCPU implements CPU {
public void process() {
System.out.println("AMD is processing...");
}
}
class IntelCPU implements CPU {
public void process() {
System.out.println("Intel is processing...");
}
}
class Computer {
CPU cpu;
public Computer(CPUFactory factory) {
cpu = factory.produceCPU();
cpu.process();
}
}
public class Client {
public static void main(String[] args) {
new Computer(createSpecificFactory());
}
public static CPUFactory createSpecificFactory() {
int sys = 0; // 基于特定要求
if (sys == 0)
return new AMDFactory();
else
return new IntelFactory();
}
}
抽象工厂模式和工厂方法模式的区别
抽象工厂模式用来创建一组相关或相互依赖的对象;工厂方法模式针对的是一个产品等级,而抽象工厂针对的是多个产品等级;通常一个产品结构,表现为一个接口或抽象类,也就是说,工厂方法提供的所有产品都衍生于同一个接口或抽象类,而抽象工厂所提供的产品则是衍生于不同接口或抽象类。
抽象工厂模式是在工厂模式的基础上增加的一层抽象概念。如果比较抽象工厂模式和工厂模式,我们不难发现前者只是增加了一层抽象的概念。
抽象工厂的优点
除了工厂方法所有的优点,还可以在类内部对产品族进行约束;抽象工厂的缺点是很难增加一个新产品。