Java设计模式--抽象工厂模式

简单来说,抽象工厂就是提供一个产生工厂的结构,具体产生的实例则由所生成的工厂来决定。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。

一般包含以下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();
    }
}

你可能感兴趣的:(Java设计模式--抽象工厂模式)