------------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
单例的作用: 只能让内存中只有这一个类的存在, 也就是说这个类只能有一个实例, 别人来共同
设计的目的以及什么时候调用: 优化内存, 如果一个类它只有一个变量, 那么它是以类存在的话,此时就可以设计成单例模式。
如何设计: 一, 它不能被其他类给实例化了;二,它可以自己提供一个实例化方法,三,这个方法是静态的,要对外访问。
2种单例:
懒汉式, 顾名思义,比较懒,当要用到的时候,再去加载它,不然就不给加载。
饿汉式: 用到的时候就已经加载好了。
饿汉式代码:
懒汉式:
饿汉式变种
懒汉式要注意的地方:
单例的作用: 只能让内存中只有这一个类的存在, 也就是说这个类只能有一个实例, 别人来共同
设计的目的以及什么时候调用: 优化内存, 如果一个类它只有一个变量, 那么它是以类存在的话,此时就可以设计成单例模式。
如何设计: 一, 它不能被其他类给实例化了;二,它可以自己提供一个实例化方法,三,这个方法是静态的,要对外访问。
2种单例:
懒汉式, 顾名思义,比较懒,当要用到的时候,再去加载它,不然就不给加载。
饿汉式: 用到的时候就已经加载好了。
饿汉式代码:
class
Singleton {
//私有,静态的类自身实例
private
static
Singleton
instance
=
new
Singleton();
//私有的构造子(构造器,构造函数,构造方法)
private
Singleton(){}
//公开,静态的工厂方法
public
static
Singleton
getInstance() {
return
instance;
}
}
懒汉式:
class
Single
{
//私有构造方法,不允许其他类创建对象
private
Single(){};
private
static
Single
instance
=
null;
//提供获取对象的方法
public
static
Single
getInstance(){
if(
instance
==
null){
//用到的时候再去加载它.
instance
=
new
Single();
}
return
instance;
}
}
饿汉式变种
class
Singleton {
//私有,静态的类自身实例
private
static
Singleton
instance
=
null;
static{
instance
=
new
Singleton();
//一出来就直接给它加载了,先把类给实例了
}
//私有的构造子(构造器,构造函数,构造方法)
private
Singleton(){}
//公开,静态的工厂方法
public
static
Singleton
getInstance() {
return
instance;
//然后就不管是不是被调用了,反正就是先被加载了
}
}
class
Single
{
/*
如果单例是被多条线程给执行了, 那么执行懒汉式的时候,就出现
两条线程同时执行了null的方法, 那么A线程执行等于null,实例化一个对象了,B再进来又被实例化了一条
这是不允许的,那么就要用到synchronized同步锁这个概念
*/
private
Single(){};
private
static
Single
instance
=
null;
//提供获取对象的方法
public
static
Single
getInstance(){
//提高判断锁的效率不让每次都判断
//如果是synchronized在前面的话,每次都要判断锁,效率很低。
if(
instance
==
null)
//多线程的同步操作,锁是自身的字节码
synchronized (
Single.
class){
if(
instance
==
null)
//自己创建对象
instance
=
new
Single();
}
return
instance;
}
}
------------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
详情请查看:http://edu.csdn.net/