抽象工厂模式是所有形态的工厂模式中最为抽象和最具有1般性的1种形态。该模式面对的是多个产品等级结构的系统设计。工厂方法模式针对的是1个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
1个产品等级结构图

多个产品等级结构图

产品族是指位于不同产品等级结构中,功能相干联的产品组成的家族。
用相图的情势表现生产品族与产品等级结构的关系

在抽象工厂模式中,每个产品族都有1个具体工厂,而每个具体工厂负责创建属于同1个产品族,但是分属于不同等级结构的产品。
农场公司要引进塑料大棚的技术,在大棚里种植热带和亚热带的水果和蔬菜。在这里水果和蔬菜就是两个等级结构,而热带的水果和热带的蔬菜是1个产品族,亚热带的水果和亚热带的蔬菜又是1个产品族。
用类图表示为

部份代码实现
package com.designpattern.abstractfactory;
/**
* Created by Administrator on 2016/9/19.
*/
public interface Fruits {
String getName();
void setName(String name);
}
package com.designpattern.abstractfactory;
/**
* Created by Administrator on 2016/9/19.
*/
public interface Vegetables {
String getName();
void setName(String name);
}
package com.designpattern.abstractfactory;
/**
* Created by Administrator on 2016/9/19.
*/
public class SubtropicalFruit implements Fruits{
private String name;
SubtropicalFruit(String name){
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
package com.designpattern.abstractfactory;
/**
* Created by Administrator on 2016/9/19.
*/
public class SubtropicalVegetable implements Vegetables{
private String name;
SubtropicalVegetable(String name){
this.name = name;
}
@Override
public String getName() {
return null;
}
@Override
public void setName(String name) {
this.name = name;
}
}
package com.designpattern.abstractfactory;
/**
* Created by Administrator on 2016/9/19.
*/
public class SubtropicalFactory implements IFatory{
public static Fruits createFruit(String name){
return new SubtropicalFruit(name);
}
public static Vegetables createVegetable(String name){
return new SubtropicalVegetable(name);
}
}
package com.designpattern.abstractfactory;
/**
* Created by Administrator on 2016/9/19.
*/
public class Client {
public static void main(String args[]){
Fruits fruit = SubtropicalFactory.createFruit("香蕉");
System.out.println(fruit.getName());
}
}