设计模式-创建型模式-单例模式

51 阅读1分钟

要素

  • 私有构造方法
  • 私有的静态引用指向自己的实例
  • 以自己实例为返回值的共有静态方法

单例模式优点

  • 节约系统资源,避免重复实例频繁创建
  • 提供了对唯一实例的受控访问

单例模式缺点

  • 不使用于变化的对象
  • 没有抽象层,扩展性不好

使用场景

  • 频繁创建并且频繁销毁的对象
  • 创建对象耗时长且资源占用大,又经常用的到的对象

单例模式实现

饿汉式单例-线程安全

public class singletonTest {

    private static singletonTest single = new singletonTest();

     //构造器需要私有化
    private singletonTest(){};

    public static singletonTest getInstance(){
        return single;
    }
}

懒汉式单例-线程不安全

public class singletonTest {

    public static singletonTest single = null;

     //构造器需要私有化
    private singletonTest(){};

    public static singletonTest getInstance(){
        if (single == null){
            single = new singletonTest();
        }
        return single;
    }
}

这里待补充一个解决线程问题的懒汉式单例

//todo

总结

  • 当一个类的对象只需要或只可能有一个时,可以考虑使用单例
  • 如果一个类的实例应该在jvm初始化时被创建出来,应该考虑使用饿汉式单例
  • 如果一个类是实例不需要预先被创建,也许这个类的实例不一定能用的上,或创建成本较大,考虑懒汉式单例
  • 切记使用懒汉式单例时,需要考虑到线程安全问题