Android 设计模式之单例模式

本文介绍了单例模式的基本概念及其在Java中的实现方式。通过具体代码示例,详细展示了如何利用volatile关键字和双重检查锁定来保证单例模式下对象的唯一性,并提供了实际应用场景。

1.作用:单例的对象必须保证只有一个对象,不允许自由构造对象。

2.适用场景:确保某个类只有一个实例,而且自行实例化向整个系统提供这个实例。

public class HttpUtils {  
    //volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.  
    //一个定义为volatile的变量是说这变量可能会被意想不到地改变,  
    //这样,编译器就不会去假设这个变量的值了。  
    //精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。  
    private volatile static HttpUtils instance;  
      
    private HttpUtils()  
    {  
        //构造函数 逻辑处理   
    }  
  
    public static HttpUtils getInstance()  
    {  
        //第一次判断是否为空  
        if(instance==null)  
        {  
            synchronized (HttpUtils.class) {//锁  
                //第二次判断是否为空 多线程同时走到这里的时候,需要这样优化处理  
                if(instance ==null)  
                {  
                    instance =new HttpUtils();  
                }  
            }  
        }  
        return instance;  
    }  
}  
3.实例

public class AlertDialogUtil {

    private volatile static AlertDialogUtil instance;
    private AlertDialogUtil.DialogPositiveButtonListener listener;

    private AlertDialogUtil() {

    }


    public static AlertDialogUtil getInstance() {
        if (instance == null) {
            synchronized (AlertDialogUtil.class) {
                if (instance == null) {
                    instance = new AlertDialogUtil();
                }
            }
        }
        return instance;
    }

    public void showDialog(Context context,String message, String[] items){
        AlertDialog.Builder dialog = new AlertDialog.Builder(context);
        dialog.setTitle(message);
        dialog.setNegativeButton("取消", null);
        dialog.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                listener.setDialogChoosePictureListener(i);
            }
        });
        dialog.create().show();
    }

    public void setDialogChoosePictureListener(AlertDialogUtil.DialogPositiveButtonListener listener) {
        this.listener = listener;
    }



    public interface DialogPositiveButtonListener {
        void setDialogChoosePictureListener(int i);
    }
}
 String[] items = {"选择本地照片", "拍照"};
 AlertDialogUtil.getInstance().showDialog(this,"设置头像",items);
 AlertDialogUtil.getInstance().setDialogChoosePictureListener(new AlertDialogUtil.DialogPositiveButtonListener() {
                    @Override
                    public void setDialogChoosePictureListener(int i) {
                        switch (i) {
                            case CHOOSE_PICTURE:
                                Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);
                                openAlbumIntent.setType("image/*");
                                startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);
                                break;
                            case TAKE_PICTURE:
                                takePicture();
                                break;
                        }
                    }
                });



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值