博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:4108 次
发布时间:2019-05-25

本文共 941 字,大约阅读时间需要 3 分钟。

单例模式

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. 不涉及里氏替换原则、依赖倒置原则、迪米特原则以及其他原则

转载地址:http://ekmsi.baihongyu.com/

你可能感兴趣的文章
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
MySQL-分布式架构-MyCAT
查看>>
设计模式六大原则(6):开闭原则
查看>>
阿里面试总结--JAVA
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>
【设计模式】—-(2)工厂方法模式(创建型)
查看>>
有return的情况下try catch finally的执行顺序(最有说服力的总结)
查看>>
String s1 = new String("abc"); String s2 = ("abc");
查看>>
JAVA数据类型
查看>>
Xshell 4 入门
查看>>
SoapUI-入门
查看>>
Oracle -常用命令
查看>>
JAVA技术简称
查看>>
ORACLE模糊查询优化浅谈
查看>>
2016——个人年度总结
查看>>
2017——新的开始,加油!
查看>>