您的位置:首页 > 其它

单例设计模式

2015-08-17 11:56 246 查看
保证在一个应用里面只有一个对象,实现方式有两种,懒汉式和饿汉式,
饿汉式一开始就初始化,并不存在线程的安全问题,实现如下
     实现思路,私有化构造函数,不让new对象,提供静态方法返回该对象实例,在定义成员变量的时候初始化
public class Person {
private Person(){}
private static Person p = new Person();
public static Person getInstance(){
return p;
}
}


饿汉式在使用的时候再去进行初始化,这样就有可能会产生线程安全问题,解决方式是双重检查
     实现思路,私有化构造函数,在调用获取对象的时候再进行初始化,这样就回存在一个安全隐患,需要双重检查判断
public class Person {
private Person() {}
private static Person p;
public Person getInstance(){
if(p == null){
synchronized (Person.class) {
if(p == null){
p = new Person();
}
}
}
return p;
}
}


在android应用中,我们经常也会用到单例模式,比入我在之前一个项目中,我把我的个人信息用一个单独的类管理,然后做成了单例,在是使用的时候需要传递Context,然后就会有内存泄露的危险

public class UserInfoManger {
private static UserInfoManger mUserInfoManger = new UserInfoManger();
private UserInfoManger(){}
private UserInfo mUserInfo;
public static UserInfoManger getInstance(){
return mUserInfoManger;
}
public UserInfo getmUserInfo(Context context) {
if( mUserInfo == null){
mUserInfo = new UserInfo(context);
}
return mUserInfo;
}
}


这里应该加上一些处理

public class UserInfoManger {
private static UserInfoManger mUserInfoManger = new UserInfoManger();
private UserInfoManger(){}
private UserInfo mUserInfo;
public static UserInfoManger getInstance(){
return mUserInfoManger;
}
public UserInfo getmUserInfo(Context context) {
if( mUserInfo == null){
context.getApplicationContext();
mUserInfo = new UserInfo(context);
}
return mUserInfo;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: