ちょうきょう666

导航

单例设计模式

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

实现过程:

将构造方法私有化,使其不能new出来

在这个类的内部产生唯一一个实例化对象,将其new出来,用static private 修饰

创建静态方法,返回实例对象

1)饿汉式

 1 public class Singleton {
 2 
 3     // 将自身实例化对象设置为一个属性,并用static、final修饰
 4     private static final Singleton instance = new Singleton();
 5     
 6     // 构造方法私有化
 7     private Singleton() {}
 8     
 9     // 静态方法返回该实例
10     public static Singleton getInstance() {
11         return instance;
12     }
13 }

优点:实现简单,没有多线程问题

缺点:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。

public class Singleton {

    // 将自身实例化对象设置为一个属性,并用static修饰
    private static Singleton instance;
    
    // 构造方法私有化
    private Singleton() {}
    
    // 静态方法返回该实例
    public static Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些特定条件下会节约了内存。

缺点:不支持多线程

线程安全的懒汉模式:

public class Singleton {

    // 将自身实例化对象设置为一个属性,并用static修饰
    private static Singleton instance;
    
    // 构造方法私有化
    private Singleton() {}
    
    // 静态方法返回该实例,加synchronized关键字实现同步
    public static synchronized Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

posted on 2020-06-15 17:40  ちょうきょう666  阅读(109)  评论(0编辑  收藏  举报