饿汉式单例模式:
1 package cn.itcast.singleton; 2 /* 3 最简单的设计模式就是单例模式 4 单个实例的模式,一个类只能生成一个对象, 5 new或者其他方式最后只能生成一个对象,不能再生成新的对象. 6 */ 7 public class SingletonTest { 8 public static void main(String[] args) { 9 Singleton singleton = Singleton.getInstance(); 10 Singleton singleton2 = Singleton.getInstance(); 11 //判断生成的对象是否是一个对象. 12 System.out.println(singleton==singleton2); 13 } 14 } 15 class Singleton{ 16 //在Singleton类中声明一个对象.然后在类中向外提供一个得到这个对象的方法 17 //下面的getInstance()方法是static类型的.要调用的也必须是static类型的. 18 private static Singleton singleton = new Singleton(); 19 20 //单例类Singleton中的构造方法必须是private,不能让外部访问该构造方法.否则无法实现单例模式 21 private Singleton(){ 22 23 } 24 //这个getInstance()方法必须是static静态的方法,因为这个方法是一个实例方法. 25 //外部调用实例方法通过该类的对象来调用,但是外部因为该类的构造方法是private的无法得到该类对象 26 //所以要声明成static静态的方法,通过类名来调用这个实例方法. 27 public static Singleton getInstance(){ 28 return singleton; 29 } 30 } 31 /* 32 这种方式(饿汉式)是你在你没有调用Singleton的时候也生成一个singleton对象了. 33 这种是一定是单例的,第二种(懒汉式)在多线程的情况下可能不是单例的. 34 */
懒汉式单例模式
1 package cn.itcast.singleton2; 2 /* 3 最简单的设计模式就是单例模式 4 单个实例的模式,一个类只能生成一个对象, 5 new或者其他方式最后只能生成一个对象,不能再生成新的对象. 6 */ 7 public class SingletonTest { 8 public static void main(String[] args) { 9 Singleton singleton = Singleton.getInstance(); 10 Singleton singleton2 = Singleton.getInstance(); 11 //判断生成的对象是否是一个对象. 12 System.out.println(singleton==singleton2); 13 } 14 } 15 class Singleton{ 16 //在Singleton类中声明一个对象.然后在类中向外提供一个得到这个对象的方法 17 //下面的getInstance()方法是static类型的.要调用的也必须是static类型的. 18 private static Singleton singleton; 19 //这个地方先不赋值,不赋值肯定不对,就要在你调用getInstance()方法的时候判断这个singleton对象是否为空. 20 21 //单例类Singleton中的构造方法必须是private,不能让外部访问该构造方法.否则无法实现单例模式 22 private Singleton(){ 23 24 } 25 //这个getInstance()方法必须是static静态的方法,因为这个方法是一个实例方法. 26 //外部调用实例方法通过该类的对象来调用,但是外部因为该类的构造方法是private的无法得到该类对象 27 //所以要声明成static静态的方法,通过类名来调用这个实例方法. 28 public static Singleton getInstance(){ 29 if(singleton == null){ 30 singleton = new Singleton(); 31 } 32 return singleton; 33 } 34 }
============================华丽丽的分割线====================================