版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~
http://blog.csdn.net/xiaoduan_/article/details/79327794
单例模式(Singleton)
目的
使得类的一个对象成为该类中唯一的对象定义
一个类有且仅有一个实例,并且自动实例化向整个系统提供要点
- 某个智能有一个实例
- 必须直径创建实例
- 必须自行向整个系统提供这个实例
- 实现
- 只提供私有的构造方法
- 含有一个该类的静态私有对象
- 提供一个静态的公有方法用于创建,获取静态私有对象
- 分类
- 饿汉式
package com.imooc.singleton;
//饿汉式:创建对象实例的时候直接初始化 空间换时间
public class SingletonOne {
//1、创建类中私有构造
private SingletonOne(){
}
//2、创建该类型的私有静态实例
private static SingletonOne instance=new SingletonOne();
//3、创建公有静态方法返回静态实例对象
public static SingletonOne getInstance(){
return instance;
}
}
2.懒汉式
package com.imooc.singleton;
//懒汉式:类内实例对象创建时并不直接初始化,直到第一次调用get方法时,才完成初始化操作
//时间换空间
public class SingletonTwo {
//1、创建私有构造方法
private SingletonTwo(){
}
//2、创建静态的该类实例对象
private static SingletonTwo instance=null;
//3、创建开放的静态方法提供实例对象
public static SingletonTwo getInstance(){
if(instance==null)
instance=new SingletonTwo();
return instance;
}
}
饿汉式和懒汉式对比
单例模式的优点
- 在内存中只有一个对象,节省内存空间
- 避免频繁的创建销毁对象,提高性能
- 避免对共享资源的多重占用
- 单例模式的缺点
- 扩张比较困难
- 如果实例化对象长期不利用,系统将默认认为垃圾进行回收,造成对象状态丢失
- 适用场景
- 创建对象时占用资源过多,但同时有需要用到该类对象
- 对系统内资源要求统一读写,如读配置信息
- 当多个实例存在可能引起程序逻辑错误,如号码生成器