单例模式有两种 第一种:饿汉式单例模式 第二种:懒汉式单例模式
概念:在它的核心构建中包含一个被称为单例的特殊类
我们在使用单例模式时只要抓住以下三个特点就可以了!!
特点:
1.单例类只能有一个实例。构造方法限定为private从而避免类在外部被实例化。
2.单例类必须自己创建自己的唯一实例。
3.单列类必须给所有其他对象提供这一实例。
代码结构:
饿汉式:
package com.zxf.single;
/**
* 单例模式就是把当前类变成一个实例
* 单例模式有两种 1.饿汉式单例 2.懒汉式单例
* @author Administrator
* 下面是饿汉式单例模式发 在类加载的时候初始化
*/
public class Singleton {
//私有构造
private Singleton(){
}
//在类加载的时候创建 写法1
private static Singleton single = new Singleton();
/*写法二 使用静态块 静态块里边的内容在类加载的时候直接创建
private static Singleton single = null;
static{
single = new Singleton();
}*/
//提供共有方法供外部使用
public static Singleton getInstance(){
return single;
}
}
懒汉式:
package com.zxf.single;
/**
* 懒汉式单例模式
* 在类加载的时候不初始化,只有当使用的时候才初始化
* @author Administrator
* 注:在多线程的环境下线程不安全 解决方法为 使用同步锁(这里只提示,不做演示)
*/
public class Singleton2 {
//私有构造
private Singleton2(){
}
private static Singleton2 single= null;
//提供共有方法供外部访问
public static Singleton2 getInstance(){
if(single==null){
single = new Singleton2();
}
return single;
}
}
测试类:
package com.zxf.single;
public class Test {
public static void main(String[] args) {
//饿汉式单例
System.out.println(Singleton.getInstance());
//懒汉式单例
System.out.println(Singleton2.getInstance());
}
}
运行结果:
至此,单例模式结束!