标签:Singleton singleton 模式 实例 static private 单例
单例模式
Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)
单例模式的优点
- 由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁的创建和销毁时,而且创建或者销毁时性能又无法进行优化,单例模式的优势就非常明显。
- 由于单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资源的时候,则可以通过在应用启动时直接产生一个单例对象,然后用永久驻留内存的方式来解决。
单例模式的使用场景
在一个系统中要求一个类有且只有一个对象,如果出现多个对象就会出现“不良反应”,可以采用单例模式,
- 要求生成唯一序列号的环境
- 在整个项目中需要一个共享访问点或共享数据
- 创建一个对象需要消耗过多的资源
- 工具类
单例模式的构建方法
1. 饿汉模式
class Singleton{
// 第一步 构造器私有化
private Singleton(){}
// 第二步 自行对外提供实例
private static final Singleton singleton = new singleton();
// 第三步 提供外界可以获取实例的方法
public static Singleton getInstance(){
return singleton;
}
}
2. 懒汉模式(延迟加载)
class Singleton{
// 第一步 构造器私有化
private Singleton(){}
// 第二步 创建实例的引用
private static final Singleton singleton = null;
// 第三步 提供外界可以获取实例的方法,此时需要判断一下引用的状态。
public static Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
3. 静态内部类
当一次访问类中的静态字段时,会触发类加载,并且一个类只加载一次。
class Singleton{
// 第一步 构造器私有化
private Singleton(){}
//第二步 创建静态内部类
private static class help{
private static Singleton singleton = new Singleton();
}
// 第三步 提供外界可以获取实例的方法
public static Singleton getInstance(){
return help.singleton;
}
}
标签:Singleton,singleton,模式,实例,static,private,单例 来源: https://www.cnblogs.com/SYXblogs/p/15269317.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。