您的位置:首页 > 移动开发 > Android开发

Android 设计模式之单例模式

2018-01-23 13:22 197 查看
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;
}
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: