抽象工厂模式深度理解,以及举例说明

一、抽象工厂模式举例

1、工厂模式类

复制代码
package factory;

public class FactoryPattern {
public static void main(String[] args) {
//工厂A只能生产产品A
Factory factory = (Factory) new FactoryA();
Product product = factory.createProduct();
product.use();
}
}
复制代码

2、抽象工厂类

package factory;

public interface Factory {
public Product createProduct();
}
3、具体工厂A

复制代码
package factory;

public class FactoryA implements Factory{

@Override
public Product createProduct() {
    System.out.println("具体工厂A");
    return new ProductA();
}

}
复制代码
4、具体工厂B

复制代码
package factory;

public class FactoryB implements Factory{

@Override
public Product createProduct() {
    System.out.println("具体工厂B");
    return new ProductB();
}

}
复制代码
5、抽象产品

package factory;

public interface Product {
public void use();
}
6、具体产品A

复制代码
package factory;

public class ProductA implements Product{

@Override
public void use() {
    System.out.println("具体产品A");
}

}
复制代码
7、具体产品B

复制代码
package factory;

public class ProductB implements Product{

@Override
public void use() {
    System.out.println("具体产品B");
}

}
复制代码
二、哪里用到了抽象工厂模式

mybatis中的sqlSessionFactory使用了抽象工厂模式,

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

通过读取配置文件,来决定创建mysql连接,还是oracle连接

复制代码

  
  
      
  

  
  

      
      
          
          
          
          
              
              
              
              
              
          
      

      
      
          
          
          
          
              
              
              
              
              
          
      
  

  
  
      
  
复制代码 三、实际的项目中遇到的使用场景

项目背景:

项目中某个接口是一个异步流程,合作方调用该接口,处理完任务之后,再将结果返回至合作方(回调时请求的地址不一样),当只有一家合作方时,不需要考虑任何问题,响应结果直接发送该合作方即可,但是当合作方数量逐渐增加到2、3、4等更多时,每次都使用if-else进行处理,就要修改代码,然后全部回归测试,增加工作量不说,还会引入bug。为了减少这样的情况,就需要引入工厂模式进行改造。

改造方案:

将回调的方法,改造成具体工厂,每次新增合作方,都是新增一个具体的工厂类,来处理个性化的操作

遇到的问题:

合作方A,如果与工厂A联系起来?

可以通过配置文件,或者通过数据库来配置,总之目的就是,每次新增合作方,都是修改配置,或者数据库,而不是修改代码

你可能感兴趣的:(抽象工厂模式,java)