美文网首页
抽象工厂模式

抽象工厂模式

作者: 李建彪 | 来源:发表于2017-05-09 20:57 被阅读0次

抽象工厂是一种常见的设计模式。此模式为一个产品家族提供了统一的创建接口。当需要这个产品家族的某一系列的时候,可以从抽象工厂中选出相对系的系列来创建一个具体的工厂类别。

外文名 Abstract Factory

适用性:
在以下情况可以使用抽象工厂模式
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
优点
具体产品从客户代码中被分离出来
容易改变产品的系列
将一个系列的产品族统一到一起创建
缺点
在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口

以上介绍我们来动手实践下:

由介绍得知:抽象工厂生产的就是产品蔟,那么我们来创建一组A类型的产品和一组B类型的产品,其中A类型的产品要和B类型的产品相对应。也就是我们说的产品蔟。

首先我们来创建一个A类型的产品抽象接口:ProductA

public interface ProductA {
    void name();
}

创建B类型的产品接口:ProductB

public interface ProductB {
    void name();
}

有了产品,接下来我们就要创建一个工厂来生产对应的产品蔟。可是我们并不知道要生成产什么类型的产品蔟。所以我们需要把工厂抽象。由子类来决定生产那种类型的产品蔟。
首先我们来个抽象工厂,并声明要生成A类型和B类型的产品蔟
AbstractFactory:

public interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}

有工厂有产品。我们还需要一些具体的产品和工厂不是吗?
首先来A类型的产品 A1和A2
A1:

public class ProductA1 implements ProductA{

    @Override
    public void name() {
        System.out.println("产品A1类型");
    }
}

A2:

public class ProductA2 implements ProductA{

    @Override
    public void name() {
        System.out.println("产品A2类型");
    }
}

以上是A类型的不同产品,比如。我们的CPU的阵脚数目,有些阵脚数目是1156,而有些阵脚数目却是1150。那么我们对应的要有能够装上这些CPU的主板吧。我们的主板上有的有1150个插孔。肯定不能插1156阵脚的CPU吧。当然。拔掉6根就可以了,哈哈。开玩笑哈~~
那么 有了A类型的产品。我们来创建具体的B类型的产品吧,同样我们来创建B1和B2
B1

public class ProductB1 implements ProductB {

    @Override
    public void name() {
        System.out.println("产品B1类型");
    }

}

B2

public class ProductB2 implements ProductB {

    @Override
    public void name() {
        System.out.println(("产品B2类型"));
    }

}

以上。我们创建了工厂和具体的产品。那么我们的工厂要怎么生产呢?
比如上面的介绍。CPU和主板的例子。有些人看到这里就会恍然大悟吧。再想想。我们抽象工厂解决的是什么问题?产品蔟。对了!那么根据这个思路。我们来创建两个工厂,分别来生成不同的产品蔟。
我们来创建工厂1和工厂2 分别来生成两种产品蔟。以下代码实现
工厂1

public class Factory1 implements AbstractFactory{

    @Override
    public ProductA createProductA() {
        return new ProductA1();
    }

    @Override
    public ProductB createProductB() {
        return new ProductB1();
    }

}

工厂2

public class Factory2 implements AbstractFactory{

    @Override
    public ProductA createProductA() {
        return new ProductA2();
    }

    @Override
    public ProductB createProductB() {
        return new ProductB2();
    }

}

这里的工厂1和工厂2他们都提供了两类产品的不同产品蔟。
工厂1生产的是 1类型的产品蔟。工厂2生产的是2类型的产品蔟。
比如A1代表CPU 阵脚数目为1150 B1代表主板 插孔数目为1150
他们生产的产品一定是配套的。到这里大家可以体会到了抽象工厂的神奇之处了吧。
我们来提供一个客户端。测试一把~

public class Client {
    public static void main(String[] args) {
        AbstractFactory factory = new Factory1();
        ProductA productA = factory.createProductA();
        ProductB productB = factory.createProductB();
        productA.name();
        productB.name();
    }
}

相关文章

网友评论

      本文标题:抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/lcnbtxtx.html