JAVA设计模式之单例模式

什么是单例模式

单例模式是一种常用的软件设计模式。
在它的核心结构中只包含一个被称为单例类的特殊类。
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

单例模式使用场景

有一些对象我们只需要一个,如:线程池、缓存、对话框、处理偏好设置、注册表的对象、日志对象、相机等。
实际上,这类对象只能有一个实例,如果制造出多个实例,就会导致许多问题产生。

设计步骤

  • 三个步骤
1.构造器设置为私有的,这样外部就不能创建其对象
2.声明一个私有静态的对象
3.创建公开的静态方法返回该对象给外部
  • 类图

DesignMode Study Note Url 5 1.jpg

设计方法与实例分析

  • 两种单例模式
懒汉式-使用时才创建对象
饿汉式-声明时就创建好对象
  • 懒汉式

方式1:不使用多线程时可用

class Camera {
    private static Camera mCamera = null;
    private Camera() {}

    public static Camera getInstance() {
        if (mCamera == null) { //如果使用了多线程,此处仍然有可能导致创建多个对象
            mCamera = new Camera();
        }
        return mCamera;
    }
}

方式2:使用了多线程时可用,但效率会降低100倍

class Camera {
    private static Camera mCamera = null;
    private Camera() {}

    public synchronized static Camera getInstance() {
        if (mCamera == null) {
            mCamera = new Camera();
        }
        return mCamera;
    }
}

方式3:双重检查加锁,方式2的改进版,可以提高效率

class Camera {
    private volatile static Camera mCamera = null;
    private Camera() {}

    public static Camera getInstance() {
        if (mCamera == null) {
            synchronized (Camera.class) {
                if (mCamera == null) {
                    mCamera = new Camera();
                }
            }
        }
        return mCamera;
    }
}
  • 饿汉式
class Camera {
    private static Camera mCamera = new Camera();
    private Camera() {}

    public static Camera getInstance() {
        return mCamera;
    }
}

在安卓中的使用

设计模式常常被用在框架设计中,因此安卓framework中使用了多种模式,单例模式随处可见
DesignMode Study Note Url 5 2.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值