抽象工厂模式是工厂方法模式的升级,用于处理具有多个产品族的情况。即每个工厂不再仅仅负责一种产品的生产。
定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
优点:便于交换产品系列,让具体的创建实例过程与客户端分离。
角色:抽象工厂,具体工厂,抽象产品(多个),具体产品
场景:现有一汽车生产商,可以生产多个品牌的不同类型的汽车。收到订单时,直接由负责还品牌的该车型进行生产。
1.抽象产品1的实现
/**
* 定义第一个抽象产品
* @author LIUZENGLONG
*
*/
public interface BenzCar{
public void create();
}
2.抽象产品2的实现
/**
* 定义第二个抽象产品
* @author LIUZENGLONG
*
*/
public interface BmwCar{
public void create();
}
3.具体产品的实现
/**
* MPV型Benz车的实现
* @author LIUZENGLONG
*
*/
public class MPVBenzCar implements BenzCar{
public void create(){
System.out.println("生产一辆MPV奔驰");
}
}
/**
* MPV型Bmw车的实现
* @author LIUZENGLONG
*
*/
public class MPVBmwCar implements BmwCar{
public void create(){
System.out.println("生产一辆MPV宝马");
}
}
/**
* SUV型Benz车的实现
* @author LIUZENGLONG
*
*/
public class SUVBenzCar implements BenzCar{
public void create(){
System.out.println("生产一辆SUV奔驰");
}
}
/**
* SUV型Bmw车的实现
* @author LIUZENGLONG
*
*/
public class SUVBmwCar implements BmwCar{
public void create(){
System.out.println("生产一辆SUV宝马");
}
}
4.抽象工厂的实现
/***
* 抽象工厂的实现
* @author LIUZENGLONG
*
*/
public interface CarFactory{
public BenzCar buyBenzCar();
public BmwCar buyBmwCar();
}
5.具体工厂的实现
/**
* 生产MPV型汽车工厂的实现
* @author LIUZENGLONG
*
*/
public class MPVCarFactory implements CarFactory{
public BenzCar buyBenzCar(){
return new MPVBenzCar();
}
public BmwCar buyBmwCar(){
return new MPVBmwCar();
}
}
/**
* 生产SUV型汽车工厂的实现
* @author LIUZENGLONG
*
*/
public class SUVCarFactory implements CarFactory{
public BenzCar buyBenzCar(){
return new SUVBenzCar();
}
public BmwCar buyBmwCar(){
return new SUVBmwCar();
}
}
6、测试
public class FactoryTest{
public static void main(String[] args){
CarFactory factory = new SUVCarFactory();
BenzCar car = factory.buyBenzCar();
car.create();
}
}