【设计模式】Java设计模式第二课之单例模式
来源:互联网 发布:网络兼职广告语 编辑:程序博客网 时间:2024/06/05 04:24
单例模式是自打我知道设计模式这个名词之后,第一个听说的一个具体的设计模式.它的使用情景是有一些关键性资源只允许产生一个实例.如果有多个实例产生的话,就会对我们的实际情况产生许多干扰.
以下是我在看书的过程中总结的几个要点:
- 确保一个类只有一个实例,并提供一个全局访问实例.
- 在Java中实现单例模式需要一个私有的构造方法,一个静态方法和一个静态实例.
- 确定在性能和资源上的限制,然后小心的选择适当的方案来实现单例,以解决多线程问题(我们必须认定所有的程序都是多线程的)
- 如果使用了多个类加载器,可能导致单例失效,产生多个实例
- 单例模式分为两种:懒汉模式和饿汉模式
- 懒汉模式:加载类的时候比较快,但是运行时获取对象的速度比较慢,因为在创建单例类的时候没有创建类的对象.是线程不安全的.要在getInstance()方法上加上syncronized关键字,如果为了效率的话需要加上双重锁定
- 饿汉模式:加载类的时候比较慢,但是运行时获取对象的速度比较快.因为在创建单例类的时候创建了类的对象.是线程安全的.
以下是用Java实现的懒汉模式和恶汉模式的代码:
懒汉模式
public class LazySingleton { //私有静态对象,加载时候不做初始化 private static LazySingleton m_instance = null; //私有构造方法,避免外部创建实例 private LazySingleton(){} //静态工厂方法,返回此类的唯一实例。当发现实例没有初始化的时候,才初始化。 synchronized public static LazySingleton getInstance(){ if (m_instance==null) { m_instance = new LazySingleton(); } return m_instance; } }
饿汉模式
public class HungerSingleton { //私有的唯一(static final)实例成员,在类加载的时候就创建好了单例对象 private static final HungerSingleton m_instance=new HungerSingleton(); //私有构造方法,避免外部创建实例 private HungerSingleton(){} //静态工厂方法,返回此类的唯一实例 public static HungerSingleton getInstance(){ return m_instance; } }
单例模式本身的代码量是很少的,但是代码量少并不代表它很简单,要想理解它的真正思想,还要多运用多思考.
0 0
- 【设计模式】Java设计模式第二课之单例模式
- IOS设计模式第二篇之单例设计模式
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- Java模式设计之单例模式
- Java模式设计之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java设计模式之单例模式
- Java模式设计之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- java设计模式之单例模式
- AppCan获得B轮1亿元融资并宣布移动引擎开源
- php输出格式化的那点事
- CSS 文字跳动
- python 学习笔记
- <script>标签的问题
- 【设计模式】Java设计模式第二课之单例模式
- JDBC:元数据 && 获取插入记录的主键值 && _JDBC_处理 Blob
- 在Android上怎样实现JAVA和JS交互呢
- 【AppCan年会纪实】妹子奖金海岛游、奖奖奖拿拿拿
- (原创)尽管少写那么多代码,但省下来的时间又在哪里呢
- jBPM工作流应用
- CocurrentHashMap和Hashtable的区别
- 记录一次给mysql加日期分区的经历
- 使用Apache HttpClient发送get、post请求