容器
在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。
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(); } }
好处:
此模式中,通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂 子类去完成。这样做的好处是核心类只关注工厂类的接口定义,而具体的产品实例交给具体的工厂子类去创建。当 系统需要新增一个产品是,无需修改现有系统代码,只需要添加一个具体产品类和其对应的工厂子类,使系统的扩 展性变得很好,符合面向对象编程的开闭原则。
缺点:
工厂方法模式虽然扩展性好,但是增加了编码难度,大量增加了类的数量,所以怎么选择还是看实际的需求。