zoukankan      html  css  js  c++  java
  • 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();
      }
    }

    好处:

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

    缺点:

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

  • 相关阅读:
    自定义组件要加@click方法
    绑定样式
    647. Palindromic Substrings
    215. Kth Largest Element in an Array
    448. Find All Numbers Disappeared in an Array
    287. Find the Duplicate Number
    283. Move Zeroes
    234. Palindrome Linked List
    202. Happy Number
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/Master-Sun/p/14314804.html
Copyright © 2011-2022 走看看