单例模式你会几种写法?

只有光头才能变强

回顾前面:

本来打算没那么快更新的,这阵子在刷Spring的书籍。在看Spring的时候又经常会看到“单例”,“工厂”这些字样。

所以,就先来说说单例和工厂设计模式啦,这两种模式也是很常见的,我看很多面经都会遇到这两种模式~

本文主要讲解单例设计模式,如果有错的地方希望能多多包涵,并不吝在评论区指正!

一、单例模式概述

单例模式定义很简单:一个类中能创建一个实例,所以称之为单例!

那我们什么时候会用到单例模式呢??

那我们想想既然一个类中只能创建一个实例了,那么可以说这是跟类的状态与对象无关的了。

频繁创建对象、管理对象是一件耗费资源的事,我们只需要创建一个对象来用就足够了!

学过Java Web的同学可能就知道:

Servlet是单例的

Struts2是多例的

SpringMVC是单例的

那既然多例是频繁创建对象、需要管理对象的,那Struts2为什么要多例呢??

主要由于设计层面上的问题,Struts2是基于Filter拦截类的,ognl引擎对变量是注入的。所以它要设计成多例的~

能使用一个对象来做就不用实例化多个对象!这就能减少我们空间和内存的开销~

那有可能有的人又会想了:我们使用静态类.doSomething()和使用单例对象调用方法的效果是一样的啊。

没错,效果就是一样的。使用静态类.doSomething()体现的是基于对象,而使用单例设计模式体现的是面向对象

二、编写单例模式的代码

编写单例模式的代码其实很简单,就分了三步:

将构造函数私有化

在类的内部创建实例

提供获取唯一实例的方法

2.1饿汉式

根据上面的步骤,我们就可以轻松完成创建单例对象了。

public class Java3y { // 1.将构造函数私有化,不可以通过new的方式来创建对象 private Java3y(){} // 2.在类的内部创建自行实例 private static Java3y java3y = new Java3y(); // 3.提供获取唯一实例的方法 public static Student getJava3y() { return java3y; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfzzx.html