设计模式学习 Day11 单例模式

82 阅读1分钟

单例模式主要的使用场景是:

1)共享资源冲突访问
2)全局唯一类

从实现方式上,单例模式有

1)懒汉式。使用时再生成,可能会造成使用时的性能问题。其实现方式有全局锁的方式,double check方式

`​

public class IdGenerator { 

  private AtomicLong id = new AtomicLong(0);

  private static IdGenerator instance;

  private IdGenerator() {}

  public static IdGenerator getInstance() {

    if (instance == null) {

      synchronized(IdGenerator.class) { // 此处为类级别的锁

        if (instance == null) {

          instance = new IdGenerator();

        }

      }

    }

    return instance;

  }

  public long getId() { 

    return id.incrementAndGet();

  }

} 2)饿汉式。初始化时直接生成,不知道延迟加载,但是不会影响运行时的性能。

public class IdGenerator { 

  private AtomicLong id = new AtomicLong(0);

  private static final IdGenerator instance = new IdGenerator();

  private IdGenerator() {}

  public static IdGenerator getInstance() {

    return instance;

  }

  public long getId() { 

    return id.incrementAndGet();

  }

} `

单例方式的主要问题是:

1)不支持构造参数
2)不方便测试
3)可扩展性不强
4)某种程度上隐藏了类之间的依赖关系
5)对OOP的特性不友好

此文章为3月Day11学习笔记,内容来源于极客时间《设计模式之美》