设计模式简单介绍(java语言)-- 单例模式

设计模式简单介绍(java语言)– 单例模式

1. 概念

单例模式是一个比较简单的设计模式,其主要定义如下:
Ensure a class has only one instance, and provide a global point of access to it.
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式通用类图:
这里写图片描述
简单来说单例模式的思想是:
私有化某类的构造器,通过方法给外部获取。

单例模式通用代码:

public class Singleton {
    
    

/**
 * @说明:单例模式通用代码
 */

    /*限制产生多个对象*/
    private static final Singleton SINGLETON = new Singleton();

    /*私有化构造方法*/
    private Singleton(){

    }

    /*通过该方法获取实例对象*/
    public static Singleton getSingleton (){
        return SINGLETON;
    }

    /*类中的其他方法,尽量是static*/
    public static void doSomething(){

    }

    /以下方法需要注意高并发情况下的线程安全问题/
    /*
    private static final Singleton SINGLETON = null;

    private Singleton(){    
    }

    public static Singleton getSingleton (){
        if(SINGLETON == null)
            SINGLETON = new Singleton();
        return SINGLETON;
    }
    */

}

2. 应用

2.1 优点:
由于只存在一个实例,减少内存开支。特别是一个对象需要频繁的创建,销毁时,并且创建或销毁的性能问题无法优化时,到单例模式优势明显。只生成一个实例减少性能开销。当一个对象产生需要较多资源的时候,比如读取配置,产生其他依赖对象是,则可以通过在应用启动时直接产生一个单例对象,然后用永久驻留内存的方式解决,注意java GC机制。单例模式可以避免对资源的多重占用,避免对同一个资源文件的同时写操作。还可以在系统设置全局的访问点,优化和共享内存访问,比如可以设计一个单例类,负责所有数据表的映射处理。
2.2 缺点:
单例模式一般没有接口,扩展困难,如果要扩展基本上只能修改原代码。
单例模式对测试不利。
2.3 应用场景:
在一个系统中,要求一个类有且只有一个对象,如:
要求生成唯一id的环境
整个项目需要一个共享访问点或共享数据的环境:web页面上的计数器
创建一个对象需要消耗资源过多的:访问io或数据库
类中存在大量静态常量和静态方法的环境

3. 扩展

需要产生固定数量对象的模式叫做有上限的多例模式,它是单例模式的一种扩展,采用有上限的多例模式,我们可以决定在内存中有多少个实例,方便系统进行扩展,修正单例模式可能存在的性能问题,提高系统的响应速度。(修改时注意线程安全

猜你喜欢

转载自blog.csdn.net/tao_789456/article/details/53115280