美文网首页
抽象工厂模式

抽象工厂模式

作者: 李建彪 | 来源:发表于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