提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
    1.一个系统要独立于它的产品的创建、组合和表示时。
    2.一个系统要由多个产品系列中的一个来配置时。
    3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
    4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
			
    1.AbstractFactory
      声明一个创建抽象产品对象的操作接口。
    2.ConcreteFactory
      实现创建具体产品对象的操作。
    3.AbstractProduct
      为一类产品对象声明一个接口。
    4.ConcreteProduct
      定义一个将被相应的具体工厂创建的产品对象。
      实现AbstractProduct接口。
    5.Client
      仅使用由AbstractFactory和AbstractProduct类声明的接口
/**
 * 发动机接口
 * @author Linhai Gu
 *
 */
public interface Motor {
	public void motor();
}public class AoDiMotor implements Motor{
	private String name=null;
	public AoDiMotor(String name) {
		this.name=name;
	}
	@Override
	public void motor() {
		System.out.println(name+"的发动机");
	}
}public class BaoMaMotor implements Motor{
	private String name=null;
	public BaoMaMotor(String name) {
		this.name=name;
	}
	@Override
	public void motor() {
		System.out.println(name+"的发动机");
	}
}/**
 * 轮胎接口
 * @author Linhai Gu
 *
 */
public interface Tyre {
	public void tyre();
}public class AoDiTyre implements Tyre{
	private String name=null;
	public AoDiTyre(String name) {
		this.name=name;
	}
	@Override
	public void tyre() {
		System.out.println(name+"的轮胎");
	}
}public class BaoMaTyre implements Tyre{
	private String name=null;
	public BaoMaTyre(String name) {
		this.name=name;
	}
	@Override
	public void tyre() {
		System.out.println(name+"的轮胎");
	}
}/**
 * 方向盘接口
 * @author Linhai Gu
 *
 */
public interface SteeringWhell {
	public void steeringWhell();
}public class AoDiSteeringWhell implements SteeringWhell{
	
	private String name=null;
	public AoDiSteeringWhell(String name) {
		this.name=name;
	}
	@Override
	public void steeringWhell() {
		System.out.println(name+"的方向盘");
	}
}public class BaoMaSteeringWhell implements SteeringWhell{
	private String name=null;
	public BaoMaSteeringWhell(String name) {
		this.name=name;
	}
	@Override
	public void steeringWhell() {
		System.out.println(name+"的方向盘");
	}
}public interface AbstractFactory {
	/*
	 * 创建Motor对象
	 */
	public Motor creatMotor();
	/*
	 * 创建Tyre对象
	 */
	public Tyre  creatTyre();
	/*
	 * 创建SteeringWhell对象
	 */
	public SteeringWhell creatSteeringWhell();
}public class AoDiFactory implements AbstractFactory{
	@Override
	public Motor creatMotor() {
		// TODO Auto-generated method stub
		return new AoDiMotor("奥迪");
	}
	@Override
	public Tyre creatTyre() {
		// TODO Auto-generated method stub
		return new AoDiTyre("奥迪");
	}
	@Override
	public SteeringWhell creatSteeringWhell() {
		// TODO Auto-generated method stub
		return new AoDiSteeringWhell("奥迪");
	}
}public class BaoMaFactory implements AbstractFactory{
	@Override
	public Motor creatMotor() {
		// TODO Auto-generated method stub
		return new BaoMaMotor("宝马");
	}
	@Override
	public Tyre creatTyre() {
		// TODO Auto-generated method stub
		return new BaoMaTyre("宝马");
	}
	@Override
	public SteeringWhell creatSteeringWhell() {
		// TODO Auto-generated method stub
		return new BaoMaSteeringWhell("宝马");
	}
}</pre><pre name="code" class="java">public class CarEngineer {
	//车需要的发动机
	private Motor motor=null;
	//车需要的轮胎
	private Tyre tyre=null;
	//车需要的方向盘
	private SteeringWhell steeringWhell=null;
	
	public void makeCar(AbstractFactory af){
		this.motor=af.creatMotor();
		this.tyre=af.creatTyre();
		this.steeringWhell=af.creatSteeringWhell();
		
		this.motor.motor();
		this.tyre.tyre();
		this.steeringWhell.steeringWhell();
	}
}public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//品牌厂家
		CarEngineer carEngineer=new CarEngineer();
		
		//客户1选的牌子
		AbstractFactory aoDi=new AoDiFactory();
		//客户2选的牌子
		AbstractFactory baoMa=new BaoMaFactory();
		//厂家推出
		System.out.println("客户1:");
		carEngineer.makeCar(aoDi);
		System.out.println("客户2:");
		carEngineer.makeCar(baoMa);
	}
}原文:http://blog.csdn.net/hai_qing_xu_kong/article/details/42084395