第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Blog-02-設(shè)計模式探索-單例模式

標簽:
Android

单例模式的适用场景

在整个程序运行时仅需要一个对象,而且不可以创建多个对象,这样的使用场景就可以选择使用单例模式。常见的单例模式有以下几种:
        1、懒汉模式 
        2、饿汉模式 
        3、枚举单例 
        4、静态内部类 
        5、双重锁定 
        以下将逐一介绍具体的使用方法,需要注意的是没有完美的单例模式,只有最合适你项目使用的单例模式,在不同的使用场景,要好好考虑,使用哪种单例模式最适合。


一、饿汉模式

        饿汉模式由于在生成Singleton Class时就创建了静态的对象提供外部使用,而且使用了final关键字做声明,所以本身就是线程安全的。        

public class Singleton {    private static final Singleton instance = new Singleton();    private Singleton(){

    }    public static Singleton getInstance() {        return instance;
    }
}

二、懒汉模式

        懒汉模式是声明一个静态对象,使用private权限的构造方法和getInstance()方法给外部提供可访问的入口。 
        实例中在单例模式中添加了getInfo()方法,用于说明供外部调用的例子。以下会举例线程安全和非线程安全的实现方式,在实际开发过程中,可以选择符合你自己项目要求的懒汉模式。 
1、1 非线程安全 
        实现非线程安全的懒汉模式过程:


public class Singleton {    private static Singleton instance;    private Singleton(){

    }    public static Singleton getInstance() {        if (instance == null) {
            instance = new Singleton();
        }        return instance;
    }    public void getInfo() {
        Log.i("Singleton", "Hello Singleton");
    }

}

        调用方式:

Singleton.getInstance().getInfo();

        打印:

Singleton: Hello Singleton

1、2 线程安全 
        实现线程安全的懒汉模式,仅需要在getInstance()方法中增加synchronized关键字即可。在此线程模式中需要关注的是,资源消耗的问题,因为每次在调用getInstance()方法是都会进行一次同步操作,运行效率就会相对较低。

        实现线程安全的懒汉模式过程:


public class Singleton {    private static Singleton instance;    private Singleton(){

    }    public static synchronized Singleton getInstance() {        if (instance == null) {
            instance = new Singleton();
        }        return instance;
    }    public void getInfo() {
        Log.i("Singleton", "Hello Singleton");
    }

}

三、枚举单例

        枚举在单例实现中是代码最简单的,由于枚举实例在Java中默认就是线程安全的,而且保证仅有一个实例,因为可以自由序列化。
         实现过程:

enum  Singleton {
   INSTANCE;   public void getInfo(){
       Log.i("Singleton", "Hello Singleton");
   }

}

        调用方式:

Singleton.INSTANCE.getInfo();

四、静态内部类

        静态内部类的实现方式与懒汉模式相似,都是当首次加载Singleton时,不会进行初始化,而是在调用getInstance()方法后,再进行初始化,属于线程安全的。

        实现过程:

public class Singleton {    private Singleton(){

    }    public static class SingletonHolder{        private static final Singleton singleton = new Singleton();
    }    public static Singleton getInstance(){        return SingletonHolder.singleton;
    }    public void getInfo() {
        Log.i("Singleton", "Hello Singleton");
    }
}

        调用方式:

Singleton.getInstance().getInfo();

五、双重检查锁定

双重检查指的是在getInstance()方法中,进行了两次对intance对象判空的过程。结合volatile声明instance对象,来保证线程安全。 
        实现过程:


public class Singleton {    private volatile static Singleton instance = null;    private Singleton(){

    }    public static Singleton getInstance() {        if (instance != null) {            synchronized (Singleton.class) {                if (instance != null) {
                    instance = new Singleton();
                }
            }
        }        return instance;
    }    public void getInfo() {
        Log.i("Singleton", "Hello Singleton");
    }
}

        调用方式:

Singleton.getInstance().getInfo();

原文链接:http://www.apkbus.com/blog-55128-77704.html

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消