美文网首页
何为单例模式

何为单例模式

作者: __晨风__ | 来源:发表于2019-02-27 13:17 被阅读0次

什么是单例模式?单例模式怎么应用?

单例模式

从字面意义来解释,就是单个对象模式,了解之后,就是只可以实例化一个对象的类

如何实现单例模式?

也就是说,怎么写一个只能实例化出一个对象的类。

通常情况下,我们创建一个类,如果我们不指定构造函数,则系统会默认为我们添加一个隐式的无参构造函数,我们在外部创建该类的实例时可以创建无数个。

如何才能保证只能实例化一个对象呢?

我们开始一步步的去想方案,首先通常情况都是通过构造函数来实例化对象的,那么我们首先试着把构造函数动一下,先试着让构造函数不能够实例化对象,这个很简单就可以实现,私有化即可,就是说,把构造函数的默认修饰符public改为private就行,这样这个类就无法实例化对象了

接下来我们继续想,如果我们在这个类里创建一个对象,供外部直接调用返回即可。所以我们自己在类里直接创建一个对象,通过方法返回对象。接下来问题又来了,我们怎么在外部调用该方法呢?我们知道,调用类的方法,有两种方式,通过对象实例化调用(现在这条路已经死掉了),第二种通过类名直接调用方法。类名直接调用,我们只有在该类方法为静态方法才可以调用,所以我们在该方法上加一个static关键字,可是返回的是对象引用。所以该对象的引用也必须为静态属性。这样我们就完成了类直接调用方法来返回对象的引用。

static关键字所修饰的变量和方法,或者代码块在类加载的时候就会去执行。也即就是说,我们还没有到运行时就已经把对象创建完成,所以在单例模式里形象的称之为“饿汉模式”。

和饿汉模式相对应有“懒汉模式”,懒汉模式是在前者基础上进一步优化,我们在类加载时不去创建对象,而是在调用方法时,事先判断有无实例,没有则去创建。这就引发了另外一个问题,如果多个线程同时调用了该实例创建方法,都走到了因为没有对象而需要创建对象的判断里,那么这时候对象就被多次创建了,返回的对象引用也就不同了。那这样就达不到我们想要的只能创建单个对象的当方式了。所以懒汉模式实际上因为是非线程安全,所以一般不推荐使用,不过我们也可以对懒汉模式进行改造,使其线程安全,这时候我们需要使用synchronized进行线程互斥就行。

好了,以上我们就对单例模式有了一个较为清晰的了解,下面就是如何去实际项目中去运用

通常如果我们在频繁创建对象,并且又很快进行回收的场景下,用单例模式去创建唯一对象,这样很大程度减少了系统资源的开销和GC回收的开销,对系统性能提升有很大的帮助。

还有很多场景,我们需要不断的去思考运用

相关文章

  • Api对接之-单例模式

    这次的api对接,除了使用适配器模式和工厂模式,同时也用到了单例模式。何为单例模式,单例模式应该算是设计模式中较为...

  • 单例模式

    单例模式介绍 把单例模式放到多线程基础这块,是因为单例和多线程有一点的关系。何为单例模式? 在它的核心结构中只包含...

  • 设计模式之单例模式——对象创建型模式

    前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...

  • 何为单例模式

    什么是单例模式?单例模式怎么应用? 单例模式 从字面意义来解释,就是单个对象模式,了解之后,就是只可以实例化一个对...

  • iOS设计模式——单例模式(Singleton)

    何为单例模式 单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点。 单例模式几乎是设计模式的最简单形式...

  • iOS开发--单例的制定 使用

    单例的使用以及制定 我们先来了解何为单利:单例模式是一种常用的软件设计模式,通过单例模式可以保证系统中一个类只有一...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • SpringMVC为何设计成单例模式?

    何为单例、多例? 单例模式即整个程序中只有一个对象,所有用户共用一个对象(scope="singleton"),在...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

网友评论

      本文标题:何为单例模式

      本文链接:https://www.haomeiwen.com/subject/nigxuqtx.html