抽象工厂模式

跟風遠走 提交于 2020-03-08 11:59:35

抽象工厂(Abstract Factory Design Pattern)是一种创建型的模式,和工厂方法类似,不过抽象工厂不只创建单一品类的产品,而是可以将产品族封装起来,创建多重产品。我们可以看一下下面的这个UML类图。

抽象工厂定义了创建产品的接口

具体工厂来实现具体的产品创建的行为逻辑

接下来我们来看一下代码:

抽象产品接口:

Phone

public interface Phone {
    String getName();
}

Pad

public interface Pad {
    String getName();
}

具体的产品类:

小米系列

public class MiPhone implements Phone {
    @Override
    public String getName() {
        return "小米";
    }
}

public class MiPad implements Pad{
    @Override
    public String getName() {
        return "MiPad";
    }
}

华为系列

public class HuaweiPhone implements Phone{
    @Override
    public String getName() {
        return "华为";
    }
}

public class HuaweiPad implements Pad{
    @Override
    public String getName() {
        return "HuaweiPad";
    }
}

然后是抽象的工厂接口:

public interface AbstractFactory {

    Phone createPhone();

    Pad createPad();
}

小米工厂:

public class MiConcreteFactory implements AbstractFactory {
    @Override
    public Phone createPhone() {
        return new MiPhone();
    }

    @Override
    public Pad createPad() {
        return new MiPad();
    }
}

华为工厂:

public class HuaweiConcreteFactory implements AbstractFactory {
    @Override
    public Phone createPhone() {
        return new HuaweiPhone();
    }

    @Override
    public Pad createPad() {
        return new HuaweiPad();
    }
}

client端测试:

public class ClientDemo {
    public static void main(String[] args) {
        AbstractFactory miFactory = new MiConcreteFactory();
        Phone miPhone = miFactory.createPhone();
        Pad miPad = miFactory.createPad();
        System.out.println(miPhone.getName());
        System.out.println(miPad.getName());

        AbstractFactory huaweiFactory = new HuaweiConcreteFactory();
        Phone huaweiPhone = huaweiFactory.createPhone();
        Pad huaweiPad = huaweiFactory.createPad();
        System.out.println(huaweiPhone.getName());
        System.out.println(huaweiPad.getName());
    }
}

打印输出:

小米
MiPad
华为
HuaweiPad

以上代码的UML图如下所示:

我们可以看到抽象工厂和简单工厂与工厂方法相比,能够创建出不同类型的产品,但是如果想让抽象工厂创建出Oppo品牌的Phone和Pad,那么必须要新增加产品族,以及Oppo产品族的具体工厂。

参考文章:https://www.geeksforgeeks.org/abstract-factory-pattern/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!