Java设计模式之单利模式
一、设计模式
二、单利模式
一、设计模式
1、设计模式定义
- 设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结
- 设计模式是软件开发人员在软件开发过程中遇到的一般问题的解决方案
2、设计模式
- 项目中合理的使用设计模式可以完美的解决很多问题
- 每种模式在现在中都有相应的原理与之对应
- 每一个模式描述了一个不断在我们周围重复发生的问题,以及该问题的解决方案
3、被大多数人认为的23种设计模式及分类
二、单利模式
1、目的:使得类的一个对象成为该类系统中的唯一实例
2、定义:一个类有且仅有一个实例,并自行实例化向整个系统提供
3、要点:
- 某个类智能有一个实例
- 必须自行创建实例
- 必须自行向整个系统提供这个实例
4、实现方法
- 只有一个构造方法
- 含有一个该类的静态实例对象
- 提供一个静态的公有方法,用于创建、获取静态实例对象
5、实现方案:
(1)饿汉式:
package com.imooc.singleton;
//创建对象的时候直接实例化,空间换时间的方式
public class Singleton {
//第一步:创建私有构造方法
private Singleton(){
}
//第二步:创建该类型的私有静态实例
private static Singleton instance=new Singleton();
//第三步:创建公有静态方法返回实例对象
public Singleton getInstance() {
return instance;
}
}
特点:
- 饿汉式在加载时就创建实例,第一次加载很快
- 空间换时间
- 饿汉式线程安全
(2)、懒汉式:
package com.imooc.singleton;
//懒汉式单利模式,时间换空间的方式
public class SingletonOne {
//第一:创建私有构造方法
private SingletonOne() {
}
//第二:创建该类型的静态实例
private static SingletonOne instance=null;
//第三:创建共有的静态的返回实例的方法
public static SingletonOne getInstance() {
if(instance==null)
instance=new SingletonOne();
return instance;
}
}
特点:
- 懒汉式在使用时才实例化,第一次加载速度很慢
- 时间换空间
- 懒汉式存在线程风险
解决懒汉式线程风险的方法:
- 同步锁
- 静态内部类
- 双重校验锁
- 枚举
6、单利模式的优缺点
(1)、优点:
- 在内存中只有一个对象,节省内存空间
- 避免频繁的创建销毁对象,提高性能
- 避免对共享资源的频繁占用
(2)、缺点:
- 扩展比较困难
- 如果实例化后的对象长期不使用,系统弄将默认为垃圾进行回收,造成对象状态丢失
7、单利模式的应用场景
- 创建对象时占用资源过多,但同时又需要用到该对象
- 对系统内资源要求统一读书。如读取系统配置信息
- 当多个实例存在可能引起程序逻辑错误。如代码生成器