单例模式可分为:饿汉式和懒汉式
优先使用懒汉式,使用懒汉式不会造成资源浪费
饿汉式
package com.hadwinling.day03.style02;
/**
* 创建时间:2020年2月13日 上午9:46:56
* 项目名称:HadwingLing
* @author HadwinLing
* @version 1.0
* @since JDK 1.6.0_21
* 文件名称:SingletonDemo.java
* 单例模式-饿汉式【单线程】
* 1.构造方法私有
* 2.单例模式的私有属性初始化
* 3.静态方法来返回单例对象(public)
*
*
*/
public class SingletonDemo {
//属性私有。保证类外部不能调用
//静态属性实例化,创建一个对象,保证对象唯一
private static SingletonDemo singletonDemo = new SingletonDemo();
//构造方法私有,保证类外部不能创建对象。
private SingletonDemo() {
}
//静态方法不能调用非静态属性,此时要将属性私有化
//通过静态方法来返回单例对象
//通过类名调用
public static SingletonDemo getInstance() {
return singletonDemo;
}
}
饿汉式的使用
package com.hadwinling.day03.style02;
/**
* 创建时间:2020年2月13日 上午9:51:59
* 项目名称:HadwingLing
* @author HadwinLing
* @version 1.0
* @since JDK 1.6.0_21
* 文件名称:SingletonDemoTest.java
*/
public class SingletonDemoTest {
public static void main(String[] args) {
SingletonDemo s1 = SingletonDemo.getInstance();
SingletonDemo s2 = SingletonDemo.getInstance();
System.out.println(s1);
System.out.println(s2);
/**
* com.hadwinling.day03.style02.SingletonDemo@15975490
* com.hadwinling.day03.style02.SingletonDemo@15975490
*/
}
}
懒汉式
package com.hadwinling.day03.style02;
/**
* 创建时间:2020年2月13日 上午10:03:52
* 项目名称:HadwingLing
* @author HadwinLing
* @version 1.0
* @since JDK 1.6.0_21
* 文件名称:SingletonDemo02.java
* 单例模式-懒汉式
* 1.构造方法私有
* 2.提供静态属性
* 3.静态方法,在第一次调用时创建唯一对象并返回
*/
public class SingletonDemo02 {
private static SingletonDemo02 singletonDemo02 ;
//构造方法私有,保证类外部不能创建对象。
private SingletonDemo02() {
}
//当第一调用静态方法时,创建对象
public static SingletonDemo02 getInstance() {
if(singletonDemo02 == null) {
singletonDemo02 = new SingletonDemo02();
}
return singletonDemo02;
}
}
懒汉式的使用
package com.hadwinling.day03.style02;
/**
* 创建时间:2020年2月13日 上午10:07:35
* 项目名称:HadwingLing
* @author HadwinLing
* @version 1.0
* @since JDK 1.6.0_21
* 文件名称:SingletonDemo02Test.java
*/
public class SingletonDemo02Test {
public static void main(String[] args) {
SingletonDemo02 s21 =SingletonDemo02.getInstance();
SingletonDemo02 s22 =SingletonDemo02.getInstance();
System.out.println(s21);
System.out.println(s22);
}
}