只有光头才能变强
回顾前面:
本来打算没那么快更新的,这阵子在刷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; } }