设计模式——单例模式
在单例模式中,又有两种形态的
一、饿汉模式
二、懒汉模式
1、饿汉模式
/* * 饿汗模式,在类加载的过程中该类就已经被实例化 */ public class Singleton { //创建一个类属性,这个类属性 指向一个该类的实例化对象。 //private关键字可以防止其他类直接操作该属性 private static Singleton singleton = new Singleton(); //使用私有构造方法,无法使其他类通过 构造方法 实例化 该类 private Singleton(){ } //通过一个public的get方法能够使外部类获取到该类属性singleton public static Singleton getSingleton(){ return singleton; } }
2、懒汉模式
/* * 懒汉模式,只有在外部类调用get方法是,Singleton2才被实例化 */ public class Singleton2 { //创建一个类属性,这个类属性为空,不指向任何实例对象 //private关键字可以防止其他类直接操作该属性 private static Singleton2 singleton2; //使用私有构造方法,无法使其他类通过 构造方法 实例化 该类 private Singleton2(){ } //通过一个public的get方法能够使外部类获取到该类属性singleton public static Singleton2 getSingleton2(){ if(singleton2== null){ singleton2=new Singleton2(); System.out.println("single2被实例化了"); } return singleton2; } }
为了验证懒汉模式下只有调用才会实例化Singleton2,测试如下
2.1、测试一
class test{ public static void main(String[] args) { //Singleton2 singleton2 = Singleton2.getSingleton2(); System.out.println("结束"); }
测试一结果如下

2.2、测试二
class test{ public static void main(String[] args) { Singleton2 singleton2 = Singleton2.getSingleton2(); System.out.println("结束"); } }
结果如下

3、总结
单例模式的意义可以是一个类只有一个实例,并且要为全部的类提供这个单例类的唯一实例,具体实现可以参考代码
懒汉模式和饿汉模式的区别:
懒汉模式:在编译的时候就创建了单例实例对象,因此不存在单例类被多次实例化的情况
但是会造成编译时间变长。
饿汉模式:在外部类判断单例对象引用为空时才会被创建,是运行时创建单例对象,但是 存在多个线程同时判断是否单例对象创建,那就会同时创建多个单例对象。解决方法引入同步机制。

浙公网安备 33010602011771号