一、什么是单例模式
应程序需要,某个类只能创建一个实例对象,并且该类只提供一个取得其对象实例的方法(静态方法)。
二、代码实现
1、饿汉式:提前准备好了一个对象等你拿去用
1 package com.atguigu.java; 2 3 //饿汉式 4 public class SingleObject { 5 6 //创建一个静态的实例对象 7 private static SingleObject instance = new SingleObject(); 8 9 //私有化构造器 10 private SingleObject() { 11 System.out.println("Hello World!"); 12 } 13 14 //提供公共的获取静态实例对象的方法 15 public static SingleObject getInstance() { 16 return instance; 17 } 20 }
2、懒汉式:你什么时候要用就什么时候造
1 package com.atguigu.java; 2 3 //懒汉式 4 public class LazySingleObject { 5 6 //没有提前造好一个私有的静态对象,只进行声明 7 private static LazySingleObject instance; 8 9 //私有化构造器 10 private LazySingleObject(){ 11 System.out.println("Hello Java!"); 12 } 13 14 //提供公共的静态方法获取实例对象,并加上锁,确保线程安全 15 //方法一、 16 // public static synchronized LazySingleObject getInstance(){ 17 // 18 // if(instance == null){ 19 // instance = new LazySingleObject(); 20 // } 21 // 22 // return instance; 23 // } 24 25 //方法二 26 public static LazySingleObject getInstance(){ 27 28 if(instance == null){ 29 synchronized(LazySingleObject.class){ 30 instance = new LazySingleObject(); 31 } 32 } 33 return instance; 34 } 35 36 }
3.代码使用
1 package com.atguigu.java; 2 3 public class SingleObjectDemo { 4 public static void main(String[] args) { 5 6 //饿汉式 7 SingleObject singleObject = SingleObject.getInstance(); 8 9 //懒汉式 10 LazySingleObject singleObject1 = LazySingleObject.getInstance(); 11 12 } 13 }
效果展示: