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

定义:

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

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

 

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

 

饿汉式

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. 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式。

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

你可能感兴趣的:(设计模式)