干眼项目中的单例模式

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动态代理。

 

posted @   雷雷提  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示