星空网 > 软件开发 > ASP.net

Android中的单例模式

定义:

单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

使用场景:

确保某一个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。

UML类图:

Android中的单例模式

单例模式几个关键点:

1、构造函数不对外开放,一般为private。

2、通过一个静态方法或者枚举返回单例类对象。

3、确保单例类的对象有且只有一个,尤其在多线程环境下。

4、确保单例类对象在反序列化时不会重新构建对象。

单例模式简单代码:

public class Singleton{

static Singleton instance=null;

private void Singleton(){}

public static Singleton getInstance(){

if(instance==null){

instance=new Singleton();

}

return instance;

}

}

单例模式其他方式:

1、懒汉模式:声明一个静态对象,并且在用户第一次调用getInstance时进行初始化,在getInstance()方法中添加了synchronized关键字,实现该方法的同步管理,特别是在多线程情况下,防止重复初始化。

该模式优点:单例只有在使用时才被实例化,节省资源;缺点:第一次加载实例化,反应慢,最大问题是每次调用getInstance()方法都需要同步,造成不必要的同步开销。

public class Singleton{

static Singleton instance=null;

private void Singleton(){}

public static synchronized Singleton getInstance(){

if(instance==null){

instance=new Singleton();

}

return instance;

}

}

2、Double Check Lock(DCL双重检查锁定)

DCL方式实现单例模式优点是,既能够在需要时才初始化单例,又能保证线程安全,并且单例对象初始化后调用getInstance()方法不进行同步锁。

该实现方式最大的优点在于getInstance()方法上,针对于instance对象进行了两次验证是否为NULL;这两种判断主要做了三件事情:

(1)给Singleton实例对象分配内存(2)调用Singleton的构造函数,初始化成员字段(3)将instance对象指向分配的内存空间;

实例代码如下:

public class Singleton{

static Singleton instance=null;

private void Singleton(){}

public static Singleton getInstance(){

if(instance==null){
   synchronized(Singleton.class){
     instance=new Singleton();
  }

}
return instance;

}

}

3、静态内部类单例模式

在Singleton类中声明一个静态内部类,静态类里实现单例对象的实例化,这样既可以确保线程安全,也可保证单例对象唯一性,同时延迟单例的实例化,这是比较推荐的一种方式。

public class Singleton{

static Singleton instance=null;

private void Singleton(){}

public static Singleton getInstance(){

return SingletonTool.instance;

}
/****静态内部类****/
private static class SingletonTool{
     private static final Singleton instance=new Singleton();
}

}

单例模式优点:减少内存开支,避免资源浪费,常住内存,实现全局数据管理和共享;

单例模式缺点:扩展难,如果在Android中持有Context,容易造成内存泄漏,最好使用Application Context;




原标题:Android中的单例模式

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

巴西空派:https://www.goluckyvip.com/tag/28714.html
巴西空派快递:https://www.goluckyvip.com/tag/28715.html
巴西空运双清:https://www.goluckyvip.com/tag/28716.html
巴西空运专线:https://www.goluckyvip.com/tag/28717.html
巴西快递:https://www.goluckyvip.com/tag/28718.html
巴西琼尼纳斯节:https://www.goluckyvip.com/tag/28719.html
川藏线自驾游要怎么走才比较划算呢?:https://www.vstour.cn/a/411240.html
去日本入住酒店,东西随意用却有一个特殊“要:https://www.vstour.cn/a/411241.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流