提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
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