单例设计模式(一)

1、引入
    在很多项目中,我们常常需要读取配置文件,也就是说在很多地方都需要创建对象帮我们完成任务。但是,在系统运行期间,系统会存在很多个这样的对象,而且每个对象里面都封装这配置文件的内容,这样会严重浪费内存。实际上,我们只需要一个对象就可以完成我们所需的任务。
2、单例设计模式
    保证一个类仅有一个实例,并提供一个访问它的全局访问点。
3、单例模式的结构说明

4、单例模式的实现
    懒汉式:马上要使用对象实例的时候才会创建,需要在getInstance方法里去判断。
                private static Singleton uniqueInstance = null;
    饿汉式:在装载类的时候就创建对象的实例。
            private static Singleton uniqueInstance = new Singleton();

懒汉式:
   package singleton;
/**
 * 懒汉式单例设计模式
 * @author Administrator
 *
 */
public class Singleton {
    /**
     * 定义一个变量来存储创建好的类实例
     */
    private static Singleton uniqueInstance = null;
    /**
     * 私有化构造方法,可以在内部控制创建实例的数目
     */
    private Singleton(){

    }
    public static synchronized Singleton getInstance(){
        //判断存储实例的变量是否有值
        if(uniqueInstance==null){
            //如果没有创建一个
            return new Singleton();
        }
        return uniqueInstance;
    }
    /**
     * 单例自己的方法
     */
    public void singletonOperation(){
        System.out.println("Singleton's method.......");
    }
    /**
     * 单例自己的属性
     */
    private String singletonData;
}

饿汉式:
   package singleton;
/**
 * 饿汉式单例设计模式
 * @author Administrator
 *
 */
public class Singleton1 {
    /**
     * 定义一个变量来存储创建好的类实例,直接在这里创建实例,只创建一次
     */
    private static Singleton1 uniqueInstance = new Singleton1();
    /**
     * 私有化构造方法,可以在内部控制创建实例的数目
     */
    private Singleton1(){

    }
    public static Singleton1 getInstance(){
        //直接使用已创建好的实例
        return uniqueInstance;
    }
    /**
     * 单例自己的方法
     */
    public void singletonOperation(){
        System.out.println("Singleton1's method.......");
    }
    /**
     * 单例自己的属性
     */
    private String singletonData;
}

5、单例设计模式中存在问题
    ①应该根据实际环境选择单例模式
    ②懒汉式在需要用的时候创建实例,节省了内存空间;饿汉式在类装载的时候就创建了实例节省了运行时间。
    ③懒汉式是线程不安全的,用的时候需要加同步锁,因为在运行时,有两个线程可能同时访问getInstance方法;饿汉式是线程安全的,类只会装载一次。
    ④给懒汉式加个同步锁 public static synchronized Singleton getInstance(){},他会降低整个访问速度,而且每次都要判断。可以使用双重检查加锁去解决。

双重检查加锁高效解决单例模式线程安全问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值