• 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();
      }
    }

    好处:

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

    缺点:

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

  • 相关阅读:
    一本书
    在linux oracle 10g/11g x64bit环境中,goldengate随os启动而自己主动启动的脚本
    关于仿酷狗音乐播放器开源:寻求一套音乐播放器素材,让仿酷狗开源
    Cocos2d-x中Vector<T>容器以及实例介绍
    成都传智播客Java/PHP培训就业率高
    P1341 无序字母对
    P1168 中位数
    P1146 硬币翻转
    P1340 兽径管理
    P2023 [AHOI2009]维护序列
  • 原文地址:https://www.cnblogs.com/Master-Sun/p/14314804.html
Copyright © 2020-2023  润新知