`

2、单例设计模式

阅读更多

一、单例设计模式

 

    解决一个类在内存中只存在一个对象

 

二、怎样保证对象的唯一呢?

 

  1. 避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
  2. 为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象
  3. 为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式

三、这三部怎么用代码体现呢?

 

  1. 将构造函数私有化
  2. 在类中创建一个本类对象
  3. 提供一个方法可以获取到该对象

 四、示例

class Student
{
	private Student(){}//禁止在外部创建对象
	private static Student s=new Student();//自己建一对象
	public static Student getStudent()//方法,获取对象
	{
		return s;
	}
	//对于事物该怎么描述还怎么描述
	//当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可
	private int age;
	public void setAge(int age)
	{
		this.age=age;
	}
	public int getAge()
	{
		return age;
	}	
}

 

五、单例设计模式有两种

 

1,饿汉式:Single类一进内存,就已经创建好了对象

class Single
{
	private Single(){}
	private static Single s = new Single();
	public static Single getInstance()
	{
		return s;
	}
}

 

2,懒汉式:single类进内存,对象还没有存在,只有调用了getInstance()方法时,才建立对象,是延迟加载方式

class Single
{
	private Single(){}
	private static Single s = null;
	public static Single getInstance()
	{
		if (s == null)
		{
			s = new Single();
		}
		return s;
	}
}

3,上述代码在在多线程中存在安全隐患,有可能建立两个甚至多个Single对象

 

优化:

class Single
{
	private Single(){}
	private static Single s = null;
	public static Single getInstance()
	{
		if (s == null)
		{
			synchronized(Single.class)
			{
				if(s == null)
					s = new Single();
			}
		}
		return s;
	}
}

 

六、在实际开发中,用饿汉式,更简洁,安全

 

    Runtime类就是采用单例模式设计的

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics