java设计模式 控制先后顺序_java常见设计模式之---单例模式

java常见设计模式之---单例模式

1、单例模式简介

单例模式(Singleton Pattern)是一个比较简单的模式,其原始定义如下:Ensure a class has only one instance, and provide a global point of access to it. 即确保只有一个实例,而且自行实例化并向整个系统提供这个实例。

因程序需要,有时我们只需要某个类只保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。事实上,这些应用都或多或少具有资源管理器的功能。

总之,选择单例模式就是为了避免不一致状态。

应用场景举例

1)、spring中的单例模式:在spring中每个bean都是单例的,这样做的好处是Spring容器可以管理这些bean的生命周期,由spring容器来决定实例的创建、销毁、销毁后的处理等等问题。如果采用非单例模式,则Bean初始化后的管理交给J2EE容器了,Spring容器就不在跟踪管理Bean的生命周期了。

2)、多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。。

3)、操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。

4)、应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加

5)、Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源

2、单例模式的特点

包括下面几个部分的简单记忆”3125“

3和1一起记忆,即三个一

单例模式只能有一个实例,

单例类必须创建自己的唯一实例

单例类必须向其他对象提供这一实例

综上所述,单例模式就是为确保一个类只有一个实例,并为整个系统提供一个全局访问点的一种方法。

2即是指2种实现方式:懒汉式和 饿汉式

5即是指五种经典实现

有两种场景可能导致非单例的情况

场景一:如果单例由不同的类加载器加载,那便有可能存在多个单例类的实例

场景二:如果 Singleton 实现了 java.io.Serializable 接口,那么这个类的实例就可能被序列化和反序列化。

3、单例模式和静态类

静态类也可以实现一个类只有一个对象,这又和单例模式有什么区别呢?

单例可以继承和被继承,方法可以被重写(override),但是静态方法不行。

静态方法中产生的对象会在执行后被释放,进而被GC所清理,不会一直存在于内存中。

静态类会在第一次运行时初始化(饿汉式也这样),单例模式可以有其他选择,如立即加载(饿汉式)和延迟加载(懒汉式)

基于上面两条,单例模式往往存在于DAO层,如果反复的初始化和释放会占用很多系统资源,而使用单例模式将其加载于内存中可以节省资源开销。

单例模式容易测试

立即加载 :

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值