(一)单例模式详解

喜欢一句话“得按你想的去生活,否则,你迟早会按你的生活去想“,软件设计也是这样,不能只停留在重复的写代码,否则,你迟早将被代码包围。应该去反复思考实践,整理出属于自己的代码仓库。

单例模式简述

确保一个类只有一个实例,并且提供一个全局的访问点。

单例类主要特征

如何创建一个单例类?

实例一

public class Singleton {
    //一个静态的实例
    private static Singleton singleton;
    //私有化构造函数
    private Singleton(){}
    //给出一个公共的静态方法返回一个单一实例
    public static Singleton getInstance(){
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

实例一就创建了一个单例类,但这个类不支持多线程,当整个系统同时请求的时候就会存在创建了多个实例的情况,所以写这样的代码存在风险。

实例二

public class Singleton{
    //定义一个静态的实例
    private static Singleton singleton;
    //私有化构造函数
    private Singleton(){}
    //增加同步方法
    public static synchronized Singleton getInstance(){
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

实例二在实例一基础上进行了优化,是常见的形式,但使用同步方法会降低代码执行效率。

实例三

public class Singleton {
    //定义一个静态的实例
    private static Singleton singleton;
    //私有化构造函数
    private Singleton() {}
    //双重锁的形式
    public static Singleton getInstance() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

实例三在实例二基础上进行了优化,使用同步代码块的方式,增加了代码执行效率。

实例四

public class Singleton {
    //在自己内部定义自己的一个实例,只供内部调用
    private static final Singleton singleton = new Singleton();
    //私有化构造函数
    private Singleton() {}
    //提供一个外部访问的静态方法
    public static Singleton getInstance() {
        return singleton;
    }
}

实例四通过类自身创建一个实例,而不是使用的时候再创建。

总结:

单例模式的本质是保证环境中有且只有一个目标对象的实例,并且提供一个全局接口对外界提供这个对象。单例模式能够有效地降低对象的创建、回收频次,减轻了对内存访问的压力。

当需要控制一个对象的实例只能有一个,而且系统只能从一个全局节点访问它时,可以使用单例模式。

更多原创内容,欢迎关注我的公众号交流学习,谢谢阅读!

微信公众号链接 BobWen的微信公众号链接

时间: 2024-08-08 06:59:17

(一)单例模式详解的相关文章

9种Java单例模式详解(推荐)

单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象.  懒汉式(线程不安全) 其主要表现在单例类在外部需要创建实例化对象时再进行实例化,进而达到Lazy Loading 的效果. 通过静态方法 getSingleton() 和private 权限构造方法为创建一个实例化对象提供唯一的途径. 不足:未考虑到多线程的情况下可能会存在多个访问者同时访问,发生构造出多个对象的问题,所以在多线程下不可用这种

[转]单例模式详解

3.1 单例模式的动机 对于一个软件系统的某些类而言,我们无须创建多个实例.举个大家都熟知的例子--Windows任务管理器,如图3-1所示,我们可以做一个这样的尝试,在Windows的"任务栏"的右键弹出菜单上多次点击"启动任务管理器",看能否打开多个任务管理器窗口?如果你的桌面出现多个任务管理器,我请你吃饭,(注:电脑中毒或私自修改Windows内核者除外).通常情况下,无论我们启动任务管理多少次,Windows系统始终只能弹出一个任务管理器窗口,也就是说在一个

Java懒汉式单例模式详解

单例模式最常见的有两种,饿汉式和懒汉式两种.本文先简单说一下懒汉式单例,再着重叙述饿汉式单例,饿汉式单例是本文的叙述重点. 懒汉式的优点是:写起来比较简单,而且不存在多线程同步问题,避免了synchronized所造成的性能问题:缺点是:初始化类的时候就需要构造实例,(即便你还没有用到这个实例),因此在某些特定条件下会耗费内存.懒汉式的写法如下: 1 /** 2 * 懒汉式单例 3 * @author James Chong 4 * 5 */ 6 public class SingleTon {

Java 单例模式详解

概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个Printe

单例模式详解

1 为什么有的工具类使用单例不使用static呢? 首先你要明白static 是在什么时候初始化的,其设计意图是是什么, 单例 就是我们运行的当前虚拟机中有且只有一个需要的对象,不存在重复. static 是给类静态成员变量使用的,属于类的属性,一般是一些常量之类的东西,从加载上来说对于类和对象之间,在类加载到内存时候静态成员变量就存在了,而对象还不存在, 另外 静态方法只能调用静态方法和静态变量这个你也应该知道,如果全部搞成静态方法那么意味着其他成员变量都要是静态的,很不方便,如果一天不要单例

【JAVA单例模式详解】

设计模式是一种思想,适合于任何一门面向对象的语言.共有23种设计模式. 单例设计模式所解决的问题就是:保证类的对象在内存中唯一. 举例: A.B类都想要操作配置文件信息Config.java,所以在方法中都使用了Config con=new Config();但是这是两个不同的对象.对两者的操作互不影响,不符合条件. 解决思路: 1.不允许其他程序使用new创建该类对象.(别人new不可控)2.在该类中创建一个本类实例.3.对外提供一个方法让其他程序可以获取该对象. 解决方法:单例模式. 步骤:

Java 单例模式详解(转)

概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个Printe

ios单例模式详解

http://blog.csdn.net/a451493485/article/details/8624990 C代码   @implementation AppShareDataManager static AppShareDataManager * shareDataManager = nil; @synthesize theCurrentLanguage; @synthesize presentModalFlag; .......... +(AppShareDataManager *) s

单例模式 详解

接口中所声明的方法都是抽象方法,接口中的方法都是public的. 接口中也可以定义成员变量.接口中的成员变量都是public.final.static的. Design Pattern(设计模式). 单例模式(Singleton Pattern):表示一个类只能生成唯一的一个对象. 第一种实现方式: public class Test{     public static void main(String[] args){         Singleton singleton = Single