龙空技术网

‘单例设计’模式-懒汉式和饿汉式

又双叒叕是程序汪 226

前言:

此刻各位老铁们对“单例模式懒汉和饿汉优缺点”大致比较珍视,同学们都需要知道一些“单例模式懒汉和饿汉优缺点”的相关资讯。那么小编也在网摘上收集了一些有关“单例模式懒汉和饿汉优缺点””的相关内容,希望各位老铁们能喜欢,姐妹们快快来了解一下吧!

作用:在应用程序中保证最多有一个实例。

好处:

提升运行效率。

实现数据共享。案例:application对象的有效范围

懒汉式

面试时一般能手写

例子:

把构造方法私有化。

其他类不能实例化这个对象。

代码:package com.wq;public class SingoTon {	//由于对象需要静态方法调用,把方法设置为static	//由于对象是static,必须设置访问权限修饰符为private,如果是public 可以直接调用对象,不执行访问入口	private static SingoTon  singoTon;	/** * 构造方法 * 方法名和类名相同 * 无返回值 *  *  * 其他类不能实例化 */  private SingoTon(){	}    /**   * 实例方法   * 实例方法必须通过对象调用   *    *    * 设置方法为静态方法   *    *    * 多线程访问下   * @return   */  public static SingoTon getInstance() {	  //添加逻辑,如果实例化过,直接返回	  if (singoTon==null) {				/*		 * 多线程情况下,可能出现if同时成立的情况,添加锁		 */		synchronized (SingoTon.class) {			//双重验证			if (singoTon==null) {				singoTon=new SingoTon();			}					}	}	return singoTon;}}

测试类:

package com.wq.test;import com.wq.SingoTon;public class Test {  public static void main(String[] args) {	  SingoTon singoTon =SingoTon.getInstance();	  SingoTon singoTon1 =SingoTon.getInstance();	//如果为ture则为单例	System.out.println(singoTon==singoTon1);}}

结果:

为什么叫懒汉式

对象只有被调用时才会去创建

饿汉式

由于添加了锁

导致多线程等待---效率会低

使用饿汉式

解决了懒汉式中多线程访问可能出现同一个对象和效率低问题

package com.wq;public class SingoTon {	//在类加载时会被实例化private static SingoTon  singoTon=new SingoTon();  private SingoTon(){}   public static SingoTon getInstance() {	 	return singoTon;}}
package com.wq.test;import com.wq.SingoTon;public class Test {  public static void main(String[] args) {	  SingoTon singoTon =SingoTon.getInstance();	  SingoTon singoTon1 =SingoTon.getInstance();	//如果为ture则为单例	System.out.println(singoTon==singoTon1);}}

当你选一种就可以

标签: #单例模式懒汉和饿汉优缺点