简单来说,抽象工厂就是提供一个产生工厂的结构,具体产生的实例则由所生成的工厂来决定。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。
一般包含以下4部分:
- 1 抽象工厂:工厂方法模式的核心,它是与具体逻辑无关。
- 2 具体工厂:实际负责各种实例的产生
- 3 抽象产品:同一类产品的抽象接口
- 4 具体产品:真正各种产品的实例
1.创建产品接口
public interface AbstractProductA {
void fun();
}
public interface AbstractProductB {
void fun();
}
2.创建具体产品
public class ProductA1 implements AbstractProductA{
@Override
public void fun() {
System.out.println("ProductA1 fun()");
}
}
public class ProductA2 implements AbstractProductA{
@Override
public void fun() {
System.out.println("ProductA2 fun()");
}
}
public class ProductB1 implements AbstractProductB{
@Override
public void fun() {
System.out.println("ProductB1 fun()");
}
}
public class ProductB2 implements AbstractProductB{
@Override
public void fun() {
System.out.println("ProductB2 fun()");
}
}
3.创建工厂接口
interface AbstractFactory {
AbstractProductA createProductA();
AbstractProductB createProductB();
}
4.创建实际工厂
public class Factory1 implements AbstractFactory{
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class Factory2 implements AbstractFactory{
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}
5.工厂管理类
public class FactoryCreater {
public static AbstractFactory getFactory(String type){
switch (type){
case "1":
return new Factory1();
case "2":
return new Factory2();
default:
return null;
}
}
}
6.测试类
public class test {
public static void main(String[] args) {
AbstractFactory factory = FactoryCreater.getFactory("1");
factory.createProductA().fun();
}
}