Android中设计模式之单例模式的种类

Android开发设计模式中的单例模式
      单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。比如在android实际APP 开发中用到的 账号信息对象管理, 数据库对象(SQLiteOpenHelper)等都会用到单例模式。下面针对一些例子分析一下我们在开发过程中应用单例模式需要注意的点。

一、作用

     单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点

二、适用场景

    1. 应用中某个实例对象需要频繁的被访问。

    2. 应用中每次启动只会存在一个实例。如账号系统,数据库系统。

三、常用的使用方式
    代码如下:
    SingletonMode.java类:

package com.chengdong.su.modeutil.util;

import android.content.Context;

public class SingletonMode {

    private static Context mContext = null;

    private SingletonMode() {
        super();
    }

    /**
     * 单例模式之懒汉式<br>
     * 优点:延迟加载,节省内存,没有使用加锁机制,执行效率高<br>
     * 缺点:单线程下安全,但是在多线程下不安全,多线程下不能保证单例<br>
     * 
     * @param context
     * @return
     */
    private static SingletonMode mInstance = null;

    public static SingletonMode getInstance(Context context) {
        mContext = context;
        if (mInstance == null) {
            mInstance = new SingletonMode();
        }
        return mInstance;
    }

    /**
     * 单例模式之饿汉式<br>
     * 优点:没有使用加锁机制,执行效率高<br>
     * 缺点:类一加载的时候就初始化,浪费内存<br>
     * 
     * @param context
     * @return
     */
    private static SingletonMode mInstance2 = new SingletonMode();

    public static SingletonMode getInstance2(Context context) {
        return mInstance2;
    }

    /**
     * 单例模式之内部类<br>
     * 优点:延迟加载,线程安全。执行效率高,节省内存<br>
     * 推荐:使用单例模式的地方就使用这一种
     * 
     * @param context
     * @return
     */
    public static SingletonMode getInstance3(Context context) {
        mContext = context;
        return SingletonHolder.mInstance3;

    }

    /**
     * @ClassName SingletonHolder
     * @Description 内部类
     * @author scd
     * @Date 2015年10月11日 上午9:01:11
     * @version 1.0.0
     */
    private static class SingletonHolder {

        /** 静态内部类的成员变量 */
        private static SingletonMode mInstance3 = new SingletonMode();

    }
}

    MainActivity.java类代码如下:

package com.chengdong.su.modeutil;

import com.chengdong.su.modeutil.util.SingletonMode;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {

    private SingletonMode mSingletonMode = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSingletonMode = SingletonMode.getInstance3(this);
        Toast.makeText(this, "单例模式的使用", Toast.LENGTH_LONG).show();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值