定义
抽象工厂模式
与工厂模式类似,但工厂模式一个工厂只创建一种对象,而抽象工厂模式中一个工厂负责创建一个对象家族(即相互之间有关联的多个对象)。
一个抽象工厂,多个具体工厂,多个抽象产品,多个具体产品。
实现
public interface Keyboard {
}
public interface Mouse {
}
// 对象族Cool系列
public class CoolKeyboard implements Keyboard {
}
public class CoolMouse implements Mouse {
}
// 对象族Simple系列
public class SimpleKeyboard implements Keyboard {
}
public class SimpleMouse implements Mouse {
}
public interface DeviceFactory {
Keyboard createKeyboard();
Mouse createKeyboard();
}
// Cool系列工厂
public class CoolDeviceFactory implements DeviceFactory {
public Keyboard createKeyboard(){
return new CoolKeyboard();
}
public Mouse createMouse(){
return new CoolMouse();
}
}
// Simple系列工厂
public class SimpleDeviceFactory implements DeviceFactory {
public Keyboard createKeyboard(){
return new SimpleKeyboard();
}
public Mouse createMouse(){
return new SimpleMouse();
}
}
// 调用者
public class Client {
public static void main(String[] args) {
DeviceFactory factory = new CoolDeviceFactory();
Keyboard keyboard = factory.createKeyboard();
Mouse mouse = factory.createMouse();
// do something
}
}优点:
- 产品一致性: 确保同一工厂创建的产品对象是相互匹配的。
- 封装:将创建对象的过程封装起来,调用方不需要关心对象创建的过程。
- 解耦:调用者只需要使用实例而不需要创建实例,更换产品类型只需要更换工厂。
- 遵循开闭原则:无需修改现有客户端代码,就可以引入新的对象族。
缺点: - 扩展困难: 如果要增加一种新产品,就需要修改抽象工厂接口及其所有子类。
- 结构复杂: 增加了大量的类和接口,增加了代码理解成本。