设计模式学习笔记(一)之单例模式(Singleton)

       从今天开始要好好花段时间学习一下最常用的几个设计模式;

     首先学习一下单例模式(Singleton):单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个;下面看一下单例模式的UML类图:

    

     看这个图比较简单,Singleton类中顶一个私有的singleton对象,和私有的构造方法,并且向外暴露一个public的getInstance()方法。这个方法来返回singleton对象。

     下面直接看模拟代码:

       第一种Singleton类的写法

       

class Singleton
{
	//使用静态私有全局变量保存唯一的实例
	  private static Singleton singleton;
	  private  Singleton()
	  {
		 
	  }
	  /**
	   * 这里保证只会实例化一次,也就是第一次进行实例化,接下来继续调用就不会去实例化
	   * @return singleton
	   */
	  public static Singleton getInstance()
	  {
		  if(null==singleton)
		  {
			  singleton=new Singleton();
			  
		  }
		  return singleton;
	  }
	
}
    从代码中进行分析,虽然我们要访问两次(下面的客户端代码是要创建两个实例)getInstance()方法,但是我们返回的是唯一的singleton实例。第一次我们去调getInstance()时会创建一个singleton实例,然后就一直存在于自身类当中,当我们再次去调用getInstance()方法的时候回去判断是否已经存在singleton实例了,存在的时候会直接返回原先已经创建好的singleton实例,这样就可以保证的实例的唯一性了。

        第二种Singleton类写法:

       

class Singleton
{
	private static Singleton singleton=new Singleton();
	private Singleton()
	{
		
	}
	public static Singleton getInstance()
	{
		return singleton;
	}
}
       下面是客户端代码:

       

/**
 * 实现单例模式测试类
 * @author jiangqq
 *
 */
public class SingletonTest {
	public static void main(String[] args) {
	Singleton singleton1=	Singleton.getInstance();
	Singleton singleton2=	Singleton.getInstance();
	//返回true  即两个对象具有相同的
	if(singleton1==singleton2)
	{
		System.out.println("singleton1和singleton2是同一个实例");
	}
	else
	{
		System.out.println("singleton1和singleton2不是同一个实例");
	}
	}
}

     运行结果截图:

      

   

      至于那种更加好嘛,我比较喜欢使用第一种,不过第一种有个弊端,是在多线程中,可能实现的实例不是唯一;这个时候我们可以通过加锁 lock()方法进行阻塞


       总结一下单例模式的一些特点:

        1:任何时候在类的程序周期之类只会唯一存在一个实例;

        2:单例的类的构造函数是私有的,如果我要去获取单例的实例,必须去通过getInstance()来请求到实例;


        

     

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值