1cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick/* 2cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * Copyright (C) 2010 The Android Open Source Project 3cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * 4cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * Licensed under the Apache License, Version 2.0 (the "License"); 5cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * you may not use this file except in compliance with the License. 6cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * You may obtain a copy of the License at 7cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * 8cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * http://www.apache.org/licenses/LICENSE-2.0 9cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * 10cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * Unless required by applicable law or agreed to in writing, software 11cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * distributed under the License is distributed on an "AS IS" BASIS, 12cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * See the License for the specific language governing permissions and 14cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * limitations under the License. 15cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick */ 16cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick 17cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrickpackage android.util; 18cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick 19cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick/** 20cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * Singleton helper class for lazily initialization. 21cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * 22cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * Modeled after frameworks/base/include/utils/Singleton.h 23cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * 24cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick * @hide 25cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick */ 26cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrickpublic abstract class Singleton<T> { 27cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick private T mInstance; 28cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick 29cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick protected abstract T create(); 30cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick 31cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick public final T get() { 32cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick synchronized (this) { 33cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick if (mInstance == null) { 34cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick mInstance = create(); 35cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick } 36cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick return mInstance; 37cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick } 38cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick } 39cdcb73ef781b8f7d37d9f758409a0c7671517b37Brad Fitzpatrick} 40