sping 梳理1--容器 sqlsessionfactory 数据源 Spring 的框架结构、简单工厂设计模式、工厂方法模式

容器

在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。

sqlsessionfactory

 

数据源1

 数据源2

1、Spring 的框架结构

Data Access/Integration层包含有JDBC、ORM、OXM、JMS和Transaction模块。

Web层包含了Web、Web-Servlet、WebSocket、Web-Porlet模块。

AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现。

Core Container(核心容器): 包含有Beans、Core、Context和SpEL模块。

Test模块支持使用JUnit和TestNG对Spring组件进行测试。

2、工厂设计模式

(1)简单工厂设计模式

简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,

但是其最 大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代 码将会非常复杂。

public interface Car {
/**
* 汽车运行的接口方法
*/
    void run();
}
public class Benz implements Car {
public void run() {
  System.out.println("奔驰 is running!");
  }
}
public class Bike implements Car {
  public void run() {
    System.out.println("我只有自行车!");
}
}
public class Bmw implements Car {
  public void run() {
  System.out.println("宝马 is running!");
  }
}

工厂:CarFactory

public class CarFactory {
  public static Car getCar(String type){
    if("benz".equalsIgnoreCase(type)){
    //其中可能有很复杂的操作
      return new Benz();
    }else if("bmw".equalsIgnoreCase(type)){
    //其中可能有很复杂的操作
      return new Bmw();
    }else {return new Bike();
    }
  }
}

测试:

public class Client {
  public static void main(String[] args) {
    Car bmw = CarFactory.getCar("bmw");
    bmw.run();
    Car benz = CarFactory.getCar("benz");
    benz.run();
  }
}

(2)工厂方法模式

我们说过java开发中要遵循开闭原则,如果将来有一天我想增加一个新的车,那么必须修改CarFactory,就不太灵 活。解决方案是使用工厂方法模式。

为每一个车都构建成一个工厂

public interface Factory {
/**
* 统一的创建方法
* @return
*/
  Car create();
}

然后针对每一个产品构建一个工厂方法

public class BenzFactory implements Factory {
  public Car create() {
    //中间省略一万行代码
    return new Benz();
  } }
public class BmwFactory implements Factory {
  public Car create() {
    //中间省略一万行代码
    return new Bmw();
  }
}
public class BikeFactory implements Factory {
  public Car create() {
    //中间省略一万行代码
    return new Bike();
  }
}

应用场景

public class Client {
  public static void main(String[] args) {
    Factory benzFactory = new BenzFactory();
    Car benz = benzFactory.create();
    benz.run();
    Factory bmwFactory = new BmwFactory();
    Car bmw = bmwFactory.create();
    bmw.run();
  }
}

好处:

此模式中,通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂 子类去完成。这样做的好处是核心类只关注工厂类的接口定义,而具体的产品实例交给具体的工厂子类去创建。当 系统需要新增一个产品是,无需修改现有系统代码,只需要添加一个具体产品类和其对应的工厂子类,使系统的扩 展性变得很好,符合面向对象编程的开闭原则。

缺点:

工厂方法模式虽然扩展性好,但是增加了编码难度,大量增加了类的数量,所以怎么选择还是看实际的需求。

原文地址:https://www.cnblogs.com/Master-Sun/p/14314804.html