23种设计模式之--单例模式

定义:

Ensure a class has only one instance, and provide a global point of access to it.

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

饿汉式

package com.anllin.designpattern;

public class Singleton
{
    private static final Singleton instance = new Singleton();

    private Singleton()
    {
    }

    public static Singleton getInstance()
    {
        return instance;
    }
}

 懒汉式

package com.anllin.designpattern.singleton;

public class Singleton
{
    private static Singleton instance = null;

    private Singleton()
    {
    }

    public synchronized static Singleton getInstance()
    {
        if(null == instance)
        {
            instance = new Singleton();
        }
        
        return instance;
    }
}

优点:

  1. 减少了内存开支。
  2. 减少了系统的性能开销。
  3. 避免资源的多重占用。
  4. 可以在系统设置全局的访问点,优化和共享资源访问。

缺点:

  1. 没有接口,扩展困难。
  2. 对测试不利,无法进行TDD。
  3. 与单一职责原则冲突。应根据实际情况判断是否使用。

使用场景:

在一个系统中,要求一个类有且仅有一个对象,如果出现多个对象就会出现“不良反应”,可以采用单例模式,具体的场景如下:

  1. 要求生成唯一序列号的环境。
  2. 在整个项目中需要一个共享访问点或共享数据,例如一个web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的。
  3. 创建一个对象需要消耗的资源过多,如访问IO和数据库等资源。
  4. 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式。

以上内容摘自《设计模式之禅》,需要了解细节的话,请自己下载书翻看。

原文地址:https://www.cnblogs.com/zfc2201/p/3423412.html