要理解抽象工厂模式,首先要理解产品树和产品族的概念
产品树:例如宝马汽车的引擎和车灯
产品族:宝马汽车的引擎和奥迪汽车的引擎是同一个产品族
一个具体工厂生产一个属于一个产品树的产品,这样生产出来的产品就是同一个具体类型的了,不用再去做相应的控制!
来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):
抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。比如宝马使用空调型号A和发动机型号A,而奥迪使用空调型号B和发动机型号B,那么使用抽象工厂模式,在为宝马生产相关配件时,就无需制定配件的型号,它会自动根据车型生产对应的配件型号A。
产品代码如下:
public interface Engine {
}
public class EngineAudi implements Engine {
public EngineAudi() {
System.out.println("生产了奥迪的引擎!");
}
}
public class EngineBMW implements Engine {
public EngineBMW(){
System.out.println("生产BMW引擎!");
}
}
public interface Light {
}
public class LightAudi implements Light {
public LightAudi() {
System.out.println("生产了奥迪的车灯!");
}
}
public class LightBMW implements Light {
public LightBMW(){
System.out.println("生产BMW车灯!");
}
}
工厂代码如下:
/**
* 抽象工厂模式中的抽象工厂
* @author Administrator
*
*/
public interface AbstractFactory {
//生产引擎
public Engine createEngine();
//生产车灯
public Light createLight();
}
public class AudiFactory implements AbstractFactory{
@Override
public Engine createEngine() {
return new EngineAudi();
}
@Override
public Light createLight() {
return new LightAudi();
}
}
public class BMWFactory implements AbstractFactory{
@Override
public Engine createEngine() {
return new EngineBMW();
}
@Override
public Light createLight() {
return new LightBMW();
}
}
客户代码如下:
public class customer {
public static void main(String[] args) {
BMWFactory b = new BMWFactory();
b.createEngine();
b.createLight();
AudiFactory a = new AudiFactory();
a.createEngine();
a.createLight();
}
}