单例设计模式

来源:互联网 发布:绝对值 java y== 编辑:程序博客网 时间:2024/06/05 16:07
保证在一个应用里面只有一个对象,实现方式有两种,懒汉式和饿汉式,
饿汉式一开始就初始化,并不存在线程的安全问题,实现如下
     实现思路,私有化构造函数,不让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;     }}




0 0
原创粉丝点击