单例模式

单例模式

1. 定义:

Ensure a class has only one instance, and provide a global point of access to it(确保一个类只有一个实例,并且提供一个全局访问点以访问到它);

2. 分析:
  1. 通过减少类实例的数量,减少内存开支,提高系统性能,当然,前提是整个系统有这一个实例便可完成相应的工作。(可以只有一个);比如,线程池、负责数据表映射处理的类、建立数据库连接的类等
  2. 保证系统工作正常,确保数据统一一致,它们多处理一些共享数据或者保证某类资源的合理有效使用(只能有一个);比如,充当显卡驱动程序、打印机驱动程序的对象、日志对象、处理设置偏好的对象;
3. 实现方法:
  1. 不允许外界通过调用该类的构造函数创建对象;(确保唯一)
    通过使用private访问修饰符修饰构造函数以实现隐藏构造函数的目的;
  2. 该类对外提供一个得到唯一实例的方法;(提供全局访问点)
    全局访问点(获取唯一实例的方法)的(多线程安全)实现方法共有三种:
    2.1) 简单使用Synchronized关键字修饰该方法;该方法简单粗暴,解决问题的同时会降低程序的性能(同步一个方法可能会造成程序执行效率下降100倍);
    适合在访问方法的性能对程序影响不大的情况下使用;
    2.2)双重检查加锁
    简单使用Synchronized关键字同步方法会使得每次调用该方法时均发生同步,然而线程不安全的情况只会发生第一次调用该方法的时候(这时候尚未创建对象实例,所以可能存在多个线程进入创建对象的代码块),当对象创建完毕后该方法就不需要再同步,因为所有的线程都会进入直接返回实例的代码块;为解决该问题,使用volatile关键字修饰静态变量,并且只同步创建对象的代码块;
    该方法适合在访问性能对程序影响较大的情况下适用
    2.3)在声明唯一变量时就完成初始化,然后在该方法里直接返回该变量;第一、二种方法都是在需要该变量的时候才“被动”创建该变量,方法三则是“主动”创建该变量,这样使用该变量的时候就一定存在该变量,也就无需检查了。
4. 体现的面向对象原则
  1. 单一职责原则:单例模式的设计应当足够专注,避免类太过臃肿;
  2. 不涉及里氏替换原则、依赖倒置原则、迪米特原则以及其他原则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值