您的位置:首页 > 编程语言 > Java开发

Spring学习必备知识之抽象工厂模式

2016-03-04 10:54 513 查看
*工厂模式的作用是用于创建对象

回顾工厂方法模式:针对不同的产品提供不同的工厂。这样当有多个产品时就需要多个工厂。所以希望能一个工厂提供多种产品对象而不是单一生产产品,这就引出了抽象工厂模式。

通过例子来说明:

有两个工厂,一个工厂A生产2厢的车,分2.0排量和3.0排量两种;工厂B生产3厢的车,分2.0排量和3.0排量两种

抽象工厂模式有两个概念:产品等级结构和产品族,具体参考这篇博文

在上面的例子中,我们可以:

定义两个个抽象产品分别为2.0排量的车和3.0排量的车,然后用具体产品类去实现它们

抽象产品2.0排量的车:

package com.example;

public interface Iproduct1 {
//一个抽象产品
//2.0排量的车
public void display();

}

具体实现:
public class ProductA1 implements Iproduct1 {

@Override
public void display() {
/*
* 这是一个具体产品
* 生产2.0排量的车
*/
System.out.println("我是2厢车厂2.0排量的车");

}

}
package com.example;

public class ProductA2 implements Iproduct1 {

@Override
public void display() {
System.out.println("我是3厢车厂2.0排量的车");
}

}


抽象产品3.0排量的车
public interface Iproduct2 {
//一个抽象产品
//3.0排量的车
public void display();
}

具体实现
public class ProductB1 implements Iproduct2 {

@Override
public void display() {
/*
* 这是一个具体产品
* 生产3.0排量的车
*/
System.out.println("我是2厢车厂3.0排量的车");

}

}
public class ProductB2 implements Iproduct2 {

@Override
public void display() {
/*
* 这是一个具体产品
* 生产3.0排量的车
*/
System.out.println("我是3厢车厂3.0排量的车");
}

}


接下来定义抽象工厂:
public interface IFactory {
//一个抽象工厂
public Iproduct1 createCar2();
public Iproduct2 createCar3();
}

具体工厂1:
public class FactoryA implements IFactory {
/*
* 2厢车的具体工厂
*/
@Override
public Iproduct1 createCar2() {

return new ProductA1();
}

@Override
public Iproduct2 createCar3() {

return new ProductB1();
}

}

具体工厂2:
public class FactoryB implements IFactory {

@Override
public Iproduct1 createCar2() {
return new ProductA2();
}

@Override
public Iproduct2 createCar3() {
return new ProductB2();
}

}

这样一个工厂就可以提供两个具体产品,与工厂方法模式的区别就出来了!
接下来我们用客户端来测试:比如我们想创建一个3厢3.0排量的车

public class Client {
public static void main(String[] args){
IFactory factory = new FactoryB();
factory.createCar3().display();
}
}

运行结果:


我参考学习的地址:设计模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  工厂模式 产品