定义


抽象工厂模式

与工厂模式类似,但工厂模式一个工厂只创建一种对象,而抽象工厂模式中一个工厂负责创建一个对象家族(即相互之间有关联的多个对象)。
一个抽象工厂,多个具体工厂,多个抽象产品,多个具体产品。

实现


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
    }
}

优点

  • 产品一致性: 确保同一工厂创建的产品对象是相互匹配的。
  • 封装:将创建对象的过程封装起来,调用方不需要关心对象创建的过程。
  • 解耦:调用者只需要使用实例而不需要创建实例,更换产品类型只需要更换工厂。
  • 遵循开闭原则:无需修改现有客户端代码,就可以引入新的对象族。
    缺点
  • 扩展困难: 如果要增加一种新产品,就需要修改抽象工厂接口及其所有子类。
  • 结构复杂: 增加了大量的类和接口,增加了代码理解成本。