重学Java-设计模式-单例模式

210 阅读1分钟

单例模式定义

单例模式的类负责创建自己的对象,同时确保只有单个对象背创建。并且这个类提供了一种访问其唯一的对象方式,可以直接访问不需要实力话对象。

使用场景

  • 在内存中只有一个实例,减少了内存的开销,尤其频繁的创建和销毁(比如网站的首页)。
  • 避免对资源的多重占用(比如文件的操作)

设计单例模式需要解决的问题

  • 多线程问题
  • 序列化可以破坏单例

多线程解决方案

饿汉式

在类加载时就创建对象,保证想要使用的时候就拿到对象,同时对象是在类加载的时候创建的保证类线程安全,但可能造成了不必要的开销,可能这个对象一直没被使用,但可以使用静态内部类的方式解决。

懒汉式

使用延迟的方式,设计对象的创建,但是要注意多线程的问题,加锁使用synchronized,但是也可能出现多线程的问题所以在家 volatile修饰对象,或者使用final 和枚举来实现。

序列化问题

只要在xxx类中定义readResolve

private Object readResolve() {
        return singleton;
    }

www.hollischuang.com/archives/13… (具体可学习该文章)