android设计模式之单例模式详解

2019-12-10 20:08:07王冬梅

 

复制代码
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();