(五)抽象工厂模式

一、概念

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类

使用对象组合,对象的创建被实现在工厂接口所暴露出来的方法中

二、特点

  • 抽象工厂定义了一个接口,所有的具体工厂都必须实现此接口,这个接口包含了一组方法来生产产品
  • 抽象工厂模式最大的好处是易于交换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易
  • 抽象工厂模式的另一个好处就是它让具体的创建实例过程与客户端分离
  • 抽象工厂与工厂方法模式的区别在于:抽象工厂是可以生产多个产品

三、类图

在这里插入图片描述

四、示例代码

(1)定义产品族

// 产品A
public interface AbstractProductA {

}
public class ProductA1 implements AbstractProductA {

    public ProductA1(){
        System.out.println("ProductA1");
    }
}
public class ProductA2 implements AbstractProductA {

    public ProductA2(){
        System.out.println("ProductA2");
    }
}
// 产品B
public interface AbstractProductB {

}
public class ProductB1 implements AbstractProductB {

    public ProductB1(){
        System.out.println("ProductB1");
    }
}
public class ProductB2 implements AbstractProductB {

    public ProductB2(){
        System.out.println("ProductB2");
    }
}


(2)定义抽象工厂

public interface AbstractFactory {

    AbstractProductA createProductA();

    AbstractProductB createProductB();
}

public class ConcreateFactory1 implements AbstractFactory {
    @Override
    public AbstractProductA createProductA() {
        return new ProductA1();
    }

    @Override
    public AbstractProductB createProductB() {
        return new ProductB1();
    }
}
public class ConcreateFactory2 implements AbstractFactory {
    @Override
    public AbstractProductA createProductA() {
        return new ProductA2();
    }

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

(3)测试调用

public static void main(String[] args) {
    ConcreateFactory1 concreateFactory1 = new ConcreateFactory1();
    concreateFactory1.createProductA();
    concreateFactory1.createProductB();

    ConcreateFactory2 concreateFactory2 = new ConcreateFactory2();
    concreateFactory2.createProductA();
    concreateFactory2.createProductB();
}

五、使用场景

  • java.sql.Connection
    在这里插入图片描述
  • Spring框架中的Bean工厂
发布了18 篇原创文章 · 获赞 0 · 访问量 275
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览