*工厂模式的作用是用于创建对象
回顾工厂方法模式:针对不同的产品提供不同的工厂。这样当有多个产品时就需要多个工厂。所以希望能一个工厂提供多种产品对象而不是单一生产产品,这就引出了抽象工厂模式。
通过例子来说明:
有两个工厂,一个工厂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();
}
}
运行结果:
我参考学习的地址:设计模式