码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2018-11-16 00:23:50      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:包含   private   let   多线程   完成   class   对象   直接   有一个   

第一次写,有不足之处可以点出来,互相交流~~
什么是单例模式?
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
单例模式分类:懒汉式单例、饿汉式单例
单例模式的特点:
1、单例类之呢个有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

①饿汉式单例
//饿汉式单例类,在类初始化时,已经自行实例化
public class Singleton {
private Singleton() {
}
private static final Singleton single = new Singleton();
// 静态工厂方法
public static Singleton getInstance() {
return single;
}
}

public class test {
public static void main(String[] args) {
Singleton sl1 = Singleton.getInstance();
Singleton sl2 = Singleton.getInstance();
System.out.println((sl1 == sl1) + "-");
}
}
②懒汉式单例
//懒汉式单例类.在第一次调用的时候实例化自己
public class Singleton1 {
private Singleton1() {
}
private static Singleton1 single=null;
// 静态工厂方法
public static Singleton1 getInstance() {
if(single == null) {
single = new Singleton1();
}
return single;
}
}

public class test {
public static void main(String[] args) {
Singleton sl1 = Singleton.getInstance();
Singleton sl2 = Singleton.getInstance();
System.out.println((sl1 == sl1) + "-");
}
}

饿汉式与懒汉式的区别:
饿汉式就是类一旦加载,就把单列初始化完成,保证getInstance的时候,单例就已经存在了。
懒汉式就是当调用genInstance的时候,才会去初始化这个单例.
其实还可以用以下两中方式区分:
1、线程安全方面:
饿汉式天生就是线程安全的,可以直接 用于多线程而不出现问题,而懒汉式本身就是非线程安全的。
2、资源加载和性能
饿汉式在类创建的同时就实例化一个静态对象出来,不管你调不调用,都会占据内存了,但是第一调用时,也会比懒汉式快,因为资源被初始化了
懒汉式,其实也恰恰和饿汉式相反,会在第一次调用实例对象出来,要初始化,性能行会延迟。

单例模式

标签:包含   private   let   多线程   完成   class   对象   直接   有一个   

原文地址:https://www.cnblogs.com/Libbo/p/9966590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!