亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android設計模式之單例模式詳解

2020-04-11 11:51:09
字體:
來源:轉載
供稿:網友

這是我們最常見的一類模式,對這一類模式有一個通用的特點就是:

封裝創建的方式和過程。

這里所謂封裝就是隱藏的意思,對對象的創建方法和過程不可見,或者是虛擬的過程。

隱藏創建方式,就是如單例,工廠方法,隱藏創建過程則是指builder,原型,至于抽象工廠,我認為他包含了以上兩種。

我們想想一個對象的創建有哪些步驟?

1、創建什么東西?--接口定義

2、誰創建?        --決策類or幫助類

3、如何創建?     --how,創建過程

4、什么時候創建?    --創建時機的觸發

由此可知,創建型就是在上面幾個點做文章

我將單例模式放在最前面來講,是因為簡單和直白。

1、單例模式

gof原文這么講的:

復制代碼 代碼如下:

Ensure a class only has one instance, and providea global point of access to it

有2點:

a、僅且只能有1個實例

b、提供一個全局訪問點

就是說一個對象只能生成一次,然后可以全局個方法或者類去調用。

<有事離開,未完待續>

從上面描述就知道,我們一般在需要只用對象的一個實例的時候才用到這個模式,類似我們常說的全局對象,在j2ee中我們知道默認spring初始化bean的時候都是單例的,我們也可以在配置文件中定義,如下:

復制代碼 代碼如下:

<bean id="foo" class="foo" singleton="true" />

這告訴spring容器,foo的實例只會生成一次。

那么在android中,有哪些地方用到了單例模式呢?

我們知道一個手機中,打開輸入法,不管在哪打開,其實都是一個實例;Activity.java中有一個mSearchManager的對象它也是單例對象;如果是android原生系統,有個全局搜索global,如果看android源碼,你會發現DisplayManagerGlobal,WindowManagerGlobal等等很多都是單例的,這些對象負責管理整個手機的運行處理。我們來看 WindowManagerGlobal 的實現:

復制代碼 代碼如下:

public static WindowManagerGlobal getInstance() {
        synchronized (WindowManagerGlobal.class) {
            if (sDefaultWindowManager == null) {
                sDefaultWindowManager = new WindowManagerGlobal();
            }
            return sDefaultWindowManager;
        }
    }

這樣系統保證了WindowManagerGlobal 對象的產生只會有一個,在系統調用(決策對象)需要的時候,調用getInstance(全局訪問點),來生成new 。這是一個很完整的單例模式的實現,一個很好的例子。

mSearchManager的實現也很有意思:

復制代碼 代碼如下:

private void ensureSearchManager() {
        if (mSearchManager != null) {
            return;
        }

        mSearchManager = new SearchManager(this, null);
    }

這里有人會說怎么這樣嗯,沒返回SearchManager對象啊,就是沒有決策類這個角色。其實他是有的,他的決策類就是我們常用的getSystemService,看代碼:

復制代碼 代碼如下:

@Override
    public Object getSystemService(String name) {
        if (getBaseContext() == null) {
            throw new IllegalStateException(
                    "System services not available to Activities before onCreate()");
        }

        if (WINDOW_SERVICE.equals(name)) {
            return mWindowManager;
        } else if (SEARCH_SERVICE.equals(name)) {
            ensureSearchManager();
            return mSearchManager;
        }
        return super.getSystemService(name);
    }

其實這里getSystemService我們可以看做一個特殊的決策類,從以下代碼來看:

復制代碼 代碼如下:

if (SEARCH_SERVICE.equals(name)) {
            ensureSearchManager();
            return mSearchManager;
        }

我們改成:

復制代碼 代碼如下:

public static SearchManager getInstance(){
     ensureSearchManager();
     return mSearchManager;
}

這就是一個單例模式。但從getSystemService整個代碼來看,確實工廠方法模式,這個我們在下面會講到。

根據對象創建時機的不同,單例模式有三種方式:

1、餓漢式    --就是實例在類加載的時候就生成

復制代碼 代碼如下:

public class foo{
        foo(){}
        private static foo instance =new foo();
        public static foo getlnstance(){
           return instance;
        }
}

2、懶漢式

復制代碼 代碼如下:

public class foo{
        foo(){}
        private static foo instance = null ;
        public static foo getlnstance(){
            if(instance == null){
                instance = new foo();
            }
           return instance;
        }
}

3、注冊式

復制代碼 代碼如下:

    public static foo getInstance(String name) {
        if(name == null) {
            name = foo .class.getName();
            System.out.println("name == null"+"--->name="+name);
        }
        if(map.get(name) == null) {
            try {
                map.put(name, (foo ) Class.forName(name).newInstance());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return map.get(name);
    }


第一種和第二種方式區別在于創建時機的差異,而第三種則是如何創建有區別。

最后,問幾個問題:

1、android還有哪些其他的單例模式

2、launcher mode中有沒有單例模式的實現

3、單例模式的拓展中,數據庫連接池屬于哪種方式的變異(衍生).

4、三種方式的單例模式的優缺點有哪些?一般用途區別在哪?。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线视频免费一区二区| 亚洲成人久久一区| 久久韩剧网电视剧| 在线电影中文日韩| 日韩精品中文字幕在线| 欧美黄色性视频| 久久全球大尺度高清视频| 国产亚洲精品美女| 日韩美女写真福利在线观看| 欧美精品电影免费在线观看| 欧美激情欧美狂野欧美精品| 57pao成人永久免费视频| 亚洲精品视频在线播放| 色妞久久福利网| 欧美日韩人人澡狠狠躁视频| 亚洲欧美日韩在线高清直播| 欧美激情va永久在线播放| 国产精品丝袜高跟| 国产精品久在线观看| 亚洲精品美女视频| 亚洲人成网站色ww在线| 国产精品www色诱视频| 欧美在线视频免费观看| 日韩中文字幕在线精品| 不卡av在线网站| 奇米4444一区二区三区| 日韩美女视频免费在线观看| 亚洲国产精品人人爽夜夜爽| 欧美精品videosex极品1| 国色天香2019中文字幕在线观看| 久久99热精品这里久久精品| 日本伊人精品一区二区三区介绍| 色综合视频一区中文字幕| 国产在线播放不卡| 色阁综合伊人av| 久久久av网站| 日韩av在线资源| 一区二区中文字幕| 亚洲欧洲一区二区三区久久| 91久久国产精品91久久性色| 久久网福利资源网站| 久久久噜噜噜久久中文字免| 国内精品久久久久影院 日本资源| 日韩国产中文字幕| 欧美性生交xxxxxdddd| 91精品国产91久久| 最近2019年好看中文字幕视频| 国产一区二区欧美日韩| 欧美丝袜第一区| 精品综合久久久久久97| 亚洲精品在线不卡| 狠狠色狠狠色综合日日小说| 成人黄色在线播放| 欧美成在线视频| 亚洲999一在线观看www| 91麻豆桃色免费看| 欧美wwwxxxx| 在线观看精品国产视频| 欧美黄色片视频| 欧美一级视频免费在线观看| 亚洲第一精品福利| 中文字幕亚洲自拍| 欧美精品18videos性欧| 亚洲精品久久7777777| 成人午夜在线视频一区| 国产日韩亚洲欧美| 亚洲第一黄色网| 国产精品一区二区在线| 欧美日韩亚洲视频| 亚洲第一中文字幕| 国产区精品在线观看| 久久亚洲精品国产亚洲老地址| 九九热99久久久国产盗摄| 日韩精品极品视频免费观看| 91av视频在线观看| 久久久久久久久久av| 668精品在线视频| 亚洲精品久久在线| 亚洲欧美日韩在线高清直播| 欧美国产精品va在线观看| 在线看日韩欧美| 日韩精品视频免费| 亚洲色图18p| 国产精品极品美女在线观看免费| 国产精品劲爆视频| 国产精品白嫩初高中害羞小美女| 色婷婷综合成人| 欧美激情图片区| 欧美电影免费在线观看| 欧美性xxxxxxxxx| 国产婷婷色综合av蜜臀av| 色琪琪综合男人的天堂aⅴ视频| 欧美中文字幕第一页| 欧美激情视频给我| 伊人男人综合视频网| 亚洲高清色综合| 久久九九有精品国产23| 欧美激情中文字幕乱码免费| 午夜精品久久久久久久久久久久久| 精品久久久久久久久久ntr影视| 久久香蕉国产线看观看av| 久久人人97超碰精品888| 韩国美女主播一区| 日本午夜人人精品| 成人黄色午夜影院| 国产成人综合亚洲| 国产精品久久久久av免费| 国产精品黄色av| 午夜精品久久久久久久99热| 欧美xxxx18性欧美| 亚洲国产精品久久久久秋霞蜜臀| 日韩大陆欧美高清视频区| 日韩精品极品视频| 一区二区三区久久精品| 成人网在线观看| 色综合伊人色综合网| 亚洲第一免费网站| 综合网日日天干夜夜久久| 懂色av一区二区三区| 亚洲精品v天堂中文字幕| 国产精品一二三视频| 亚洲免费影视第一页| 孩xxxx性bbbb欧美| 欧美色videos| 欧美日韩在线视频一区二区| 国产精品69久久| 91精品国产色综合| 欧美黑人巨大xxx极品| 日韩欧美国产高清91| 国产91精品视频在线观看| 国产精品av免费在线观看| 亚洲福利视频免费观看| 在线精品国产成人综合| …久久精品99久久香蕉国产| 亚洲va男人天堂| 久久影院免费观看| 精品亚洲国产视频| 久久免费视频观看| 国产精品狼人色视频一区| 韩曰欧美视频免费观看| 2019亚洲日韩新视频| 日韩在线中文字幕| 正在播放亚洲1区| 欧美性生交大片免费| 亚洲精品按摩视频| 久久久久久一区二区三区| 欧美精品在线看| 欧美日本高清一区| 啪一啪鲁一鲁2019在线视频| 亚洲自拍av在线| 中文字幕亚洲欧美日韩在线不卡| 欧美性xxxxx| 久久久亚洲精品视频| 日本成人免费在线| 国产69精品久久久| 欧美激情一区二区三区久久久| 亚洲免费小视频| 欧美日韩国产一区二区| 欧美激情在线狂野欧美精品| 88国产精品欧美一区二区三区| 成人h猎奇视频网站| 奇米一区二区三区四区久久| 国产精品久久久久久久久久尿| 久久久国产成人精品|