设计模式 您所在的位置:网站首页 qq会员预付费是啥东西 设计模式

设计模式

2023-06-08 16:59| 来源: 网络整理| 查看: 265

在现在的框架里面单例模式算是使用很多的设计模式了,有的时候可能自己写或者设计的时候并不多,但是实际在使用的过程中,框架本身提供了很多的该类模式。如Spring注入的对象等大部分都是单例模式的。

单例模式的特点是全局唯一,在具体的场景,菜鸟教程里面给到了若干种实现方式:单例模式 | 菜鸟教程 结合具体的业务场景可以按需取用。

单例模式带来的好处:

需要创建的对象数量减少了,对于堆内存的消耗降低了。避免对资源占用的多重占用,这里需要好好理解一下的 菜鸟教程里面讲到的事文件的占用,单例占用单个文件?这个有待商榷。

怎么实现单例模式是有模版的,但是在何时使用单例模式这个却是比怎么实现更为重要的需要思考的部分。

下面列举一下可能需要考虑单例或者多例的场景。

资源消耗问题,这个问题其实不是什么大问题,如果只是小对象频繁的创建和删除的话,Java的垃圾回收器能够解决99%的场景。这种情况下需要考虑的是极端的case,如:资源占用的时间极端长,所需要创建的对象极端大,还有就是对象使用极端多,而本身又比较无状态或者可以变成无状态,这几种情况下都可以构成考虑使用单例模式的要素。其他情况下使用或者不使用单例模式的意义也需要考虑一些,我自己的话接触比较有限,后续如果遇到继续补充。服务是否有状态,当下的Spring注入的对象体系里面其实大部分的服务都是无状态的,无状态的服务在多部署分布式的场景下能够很好的进行弹性扩缩容,而不会因为服务端保存了状态而导致相关的数据不一致的问题。也有比较极端的case里面需要考虑非单例的情况,比如部分netty服务生成的handler可能不是单例模式,这时候考虑使用类的时候需要考虑是否是单例实现,如果不是,需要考虑部分属性数据是否符合诉求和预期。

在当下的框架体系中,构建单例我自己的优先级一般是:

通过框架注入。需要动态加载的情况,也可以自行实现部分工具类等这种本身和业务服务无关注入到框架和不需要注入框架的应用场景几乎都需要单例就没有必要了,不注入通过工具类代码自行实现还能保证工具类包比较内聚,降低使用成本。

一些情况下除了通过框架注入需要注意,有时候需要进行部分单例对象的多态处理问题,这个时候有很多方式,我比较习惯的是:

集成ApplicationAware接口做BeanUtils工具类,然后通过工具类构建一个简单工厂,通过简单工厂上产单例对象。

这种设计思路的好处是,框架本身也只是工具,能够把工具类的通用内容给独立且内聚出来,简单工厂来处理简单的业务分发逻辑,非常适合一些多策略的场景,多实现的多态场景。也能对设计进行解耦。相关的工厂方法和BeanUtils的工厂两个都具有比较高的复用价值。

单例模式本身的话本身不是什么复杂的东西,不过有的时候需要注意的是一些小细节的东西,有的时候大家使用单例模式的时候,对于对象本身不去private构造方法,导致实现的时候有些家伙进行new对象这种就很不合适。导致全局有两套单例和多例同时存在,这种设计就很扯淡,增加了思考的成本。Spring框架一般提供无状态的服务,new对象这件事情可能会产生依赖问题,因为走不到代理,但是这种事情尽量少做,显得很没有水平。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有