工厂设计模式三(抽象工厂)

抽象工厂

随着我们业务的不断复杂,我们的设计模式要需要作出调整。工厂设计模式的最终状态就是抽象工厂。那什么是抽象工厂呢?简单工厂,我们抽象出来的是产品,工厂方法,我们抽象出来的是工厂。而抽象工厂,就是把产品和工厂都抽象出来。保证每个工厂生产此工厂对应的产品类型。
回到代码层面
第一步:我们先把产品抽象出来,为什么先抽象产品呢?因为我们需要根据产品的种类来确定工厂的种类。
1.抽取所有产品的基类

package cn.zl.AbstractFactory;
// 所有产品的基类
public interface Product {
}

2.产品,我们为了显得业务很复杂,我们再分为产品A,产品B。
产品A的基类

package cn.zl.AbstractFactory;
// 产品A的父类
public interface ProductA extends Product {
}

产品B的基类

package cn.zl.AbstractFactory;
// 产品B的基类
public interface ProductB extends Product{
}

3.产品的具体实现类,A类产品,分为A1,A2。B类产品,分为B1,B2。代码如下:

package cn.zl.AbstractFactory;
public class ProductA_1 implements ProductA{
    ProductA_1(){
        // 产品A1
    }
}
package cn.zl.AbstractFactory;
public class ProductA_2 implements ProductA{
    ProductA_2(){
        // 产品A2
    }
}
package cn.zl.AbstractFactory;
public class ProductB_1 implements ProductB{
    ProductB_1(){
        // 产品B1
    }
}
package cn.zl.AbstractFactory;
public class ProductB_2 implements ProductB{
    ProductB_2(){
        // 产品B2
    }
}

第二步:开始抽象工厂基类。
1.所有工厂对象的父类

package cn.zl.AbstractFactory;
// 所有工厂的父类
public interface Factory {
}

2.创建工厂A和工厂B的实现类。

package cn.zl.AbstractFactory;
// 工厂A类
public class FactoryProductA implements Factory{
    public Product getProductA_1(){
        return new ProductA_1();
    }
    public Product getProductA_2(){
        return new ProductA_2();
    }
}
package cn.zl.AbstractFactory;
// 工厂B类
public class FactoryProductB implements Factory{

    public Product getProductB_1(){
        return new ProductB_1();
    }

    public Product getProductB_2(){
        return new ProductB_2();
    }
}

这样我们就完成了抽象工厂的案例。接下来,我们就测试一下。

package cn.zl.AbstractFactory;
public class Main {
    public static void main(String[] args) {
        // 生产productA1产品
        Product productA_1 = new FactoryProductA().getProductA_1();
        // 生产productA2产品
        Product productA_2 = new FactoryProductA().getProductA_2();
        // 生产product1产品
        Product productB_1 = new FactoryProductB().getProductB_1();
        // 生产productAB2产品
        Product productB_2 = new FactoryProductB().getProductB_2();
    }
}

好了,工厂设计模式,差不多完了,消化消化。在实际的工作中,懂设计模式更多的是帮助我们了解一些三方件的源码。这样我们很容易的搞清楚三方件的核心类。

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