设计模式之单例模式

 单例模式 (Singleton Pattern) 是最简单的设计模式之一。设计思想是确保一个类只有一个实例(对象)。

  1.为了确保只有一个类只有一个实例就要私有化构造函数,防止new的出现;

       2.类本身提供一个获取该类对象的方法,每次返回同一个对象;

 单例模式大致分为两种类型:懒汉式,饿汉式;

废话不多说上代码:

package com.jde.jiangdeenleanpraent.design.single;

public class Single {

    private Single singgle = null;

    /**
     * 私有化构造函数,防止new
     */
    private Single() {
    }

    /**
     * 懒汉式,使用的时候才加载
     * 在多线程情况下会有线程安全问题
     */
    public Single getSinggle() {
        if (null == singgle) {
            return new Single();
        }
        return singgle;
    }

大家可能已经看出上面那段代码的问题了,在多线程情况下还是有可能创建多个对象,如果一个线程走到new Single();另一个线程已经进入if判断那就会产生多个对象。

现将代码改动如下:

    /**
     * 懒汉式,多线程情况下线程安全,但是效率低
     */
    public synchronized Single getSyncSingle() {
        if (null == singgle) {
            return new Single();
        }
        return singgle;
    }

现在看一下饿汉式的创建方式:

package com.jde.jiangdeenleanpraent.design.single;

public class Single {

    private static final Single singgle = new Single();

    /**
     * 私有化构造函数,防止new
     */
    private Single() {
    }

    /**
     * 饿汉式,初始化就先new出一个对象,每次调用都返回同一对象
     */
    public Single getSingle() {
        return singgle;
    }

懒汉式的好处是,对象用的时候才生成,提升项目启动效率,如果不用不会占用内存。

饿汉式的好处是,效率高,但是在初始化的时候就生成对象,如果不用会占用内存,造成内存资源的浪费。

 

posted @ 2019-07-18 16:30  全体女玩家  阅读(204)  评论(0编辑  收藏  举报