• 干眼项目中的单例模式


    1、客户端只需要在一台主机上启动一个项目,所以使用单例模式,让用户无法重复启动程序。

    2、单例模式的好处:唯一定位一个对象,容易拿到。

    3、降低内存的消耗,节约内存资源,频繁创建和销毁对象单例模式会降低系统的性能。

    缺点:没有抽象层,对单例类的扩展有困难。单例模式职责过重,担任了工厂角色,又充当了产品的角色。

    Spring框架中的设计模式:

    1、工厂设计模式:Spring使用工厂模式通过BeanFactory、ApllicationContext创建bean对象。

    2、代理设计模式:SpringAOP功能实现。

    3、单例设计模式:SpringBean默认是单例的,可以是Prototyle,SingleTon,request,session,globalsession作用域。多例、单例、每次http请求产生一个bean、每个session表示该针对每个http产生的bean、global全局httpsession。

    4、模板方法设计模式:父类定义整体框架,包括调用什么方法,方法执行顺序。Spring中事务管理器AbstractPlatformTransactionManager就包含了多个模板方法,

    比如提交事务,获取当前事务,在模板方法中按照一定顺序调用一些抽象方法,等待子类去实现,常见的子类DataSourceTransactionManager等。

    小结:通过把不变行为搬移到超类,去除子类中的重复代码,通过模板方法模式把这些行为搬移到单一的地方,子类将父类的虚方法实现就行。·

    5、观察者模式:Spring事件驱动模型就是观察中的一个应用

    6、适配器模式:Spring AOP的增强和通知Advice使用的是适配器模式、spring MVC也是使用了适配器模式的Controller。

    SpringMVC中DispatcherServlet通过HandlerAdapter处理器适配器调用具体的处理器。

    protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {
        if (this.handlerAdapters != null) {
            //遍历所有的处理器适配器,找到支持处理当前handler的处理器适配器(HandlerAdapter是一个接口,其实返回的是一个实现HandlerAdapter的子类)
            for (HandlerAdapter adapter : this.handlerAdapters) {
                if (adapter.supports(handler)) {
                    return adapter;
                }
            }
        }
        throw new ServletException("No adapter for handler [" + handler +
                "]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler");
    }

    通过适配器模式我们将所有的 controller 统一交给 HandlerAdapter 处理,免去了写大量的 if-else 语句对 Controller 进行判断,也更利于扩展新的 Controller 类型。

    7、代理模式:SpringAoP主要实现有两种方式:1、JDK动态代理和2、Cglib动态代理

    (1)、JDK动态代理只提供接口的代理,不支持类的代理,要求被代理类实现接口。(核心是InvocationHandler接口和Proxy类,动态创建目标类的代理对象,InvocationHandler通过invoke方法反射来调用目标代码,动态将横切逻辑和业务做在一起)

    (2)、Cglib是通过直接继承被代理类,生成一个fastClass对象,进行动态代理。

    源码中Spring可以判断是否被代理类是否实现了接口,如果实现了接口,就会使用jdk动态代理,否则使用动态打理Cglib。

    小结:JDK的效率其实更高。默认是使用JDK动态代理。

  • 相关阅读:
    【Android】12.3 在当前Activity中获取另一个Activity的返回值
    【Android】12.2 利用Intent启动和关闭Activity
    【Android】12.1 Intent基本概念
    【Android】12.0 第12章 Intent及其过滤器—本章示例主界面
    【Android】11.6 Fragments基本用法示例
    【Android】11.5 创建和管理Fragments
    【Android】11.4 Fragment及其生命周期
    【Android】11.3 屏幕旋转和场景变换过程中GridView的呈现
    HTML标记之Form表单
    HTML标记之a标签
  • 原文地址:https://www.cnblogs.com/Alei777/p/16449778.html
Copyright © 2020-2023  润新知