Androidデザインモデルシリーズの一例モデル


シングルモデルは、GOFの23種類の設計モードの中で最も簡単なものと言えます。
このモードは他のいくつかのモードに比べて独立しています。自分の実用化された数量の単一を制御します。
Androidでは多くのところで単例モードが使われていますが、ここでは入力管理者のInputMethodManagerを例に分析を展開します。
シングルケースモードでは、Singleton Patternは、その特有の利点で、代替システムにおけるグローバル変数の応用が非常に広いです。
1.意図
一つのクラスが一例しかないことを保証し、その全体的なアクセスポイントを提供します。
ホットワード:単例の唯一の私有構造
2.構造

Androidには多くのシステムレベルのグローバル変数があります。例えば、時間、入力法、アカウント、ステータスバーなど、Androidではこれらに対して直接的または間接的に単例モードを使いました。

入力法を例にとって、上図を実際の状況に修正します。
非常に簡単ですが、上からもsynchronizedキーワードを見ました。マルチスレッドの環境下で、一例モードは自分のインスタンスの数を保証するために唯一、必ず同時制御をします。
このようなスレッドセキュリティの一例としては、プロセスをまたぐ一例、パラメータ化の一例などが挙げられますが、本論文の範囲を超えて多くのものに触れています。
3.コード:

public final class InputMethodManager { 
static final Object mInstanceSync = new Object();//   
//         
static InputMethodManager mInstance; 

//  api 
static public InputMethodManager getInstance(Context context) { 
return getInstance(context.getMainLooper()); 
} 

/** 
*   api,      api   
* @hide      api 
*/ 
static public InputMethodManager getInstance(Looper mainLooper) { 
synchronized (mInstanceSync) { 
if (mInstance != null) { 
return mInstance; 
} 
IBinder b = ServiceManager.getService(Context.INPUT_METHOD_SERVICE); 
IInputMethodManager service = IInputMethodManager.Stub.asInterface(b); 
mInstance = new InputMethodManager(service, mainLooper); 
} 
return mInstance; 
} 
} 
クライアント呼び出し、例えば、contextimplのget System Service()の方法では、以下のように呼ばれています。

class ContextImpl extends Context{ 
@Override 
public Object getSystemService(String name) { 
if (WINDOW_SERVICE.equals(name)) { 
//... ...     n if,else if 
} else if (INPUT_METHOD_SERVICE.equals(name)) { 
//             
return InputMethodManager.getInstance(this); 
} else if (KEYGUARD_SERVICE.equals(name)) { 
//... ...     n if,else if 
} else if (ACCESSIBILITY_SERVICE.equals(name)) { 
//    ,     
return AccessibilityManager.getInstance(this); 
} else if (LOCATION_SERVICE.equals(name)) { 
//... ...     n if,else if 
} else if (NFC_SERVICE.equals(name)) { 
return getNfcManager(); 
} 
return null; 
} 
} 
非常にシンプルで清潔なモデルです。
4.効果
(1)パターンを作成します。
(2)一意のインスタンスに対する制御されたアクセス。
(3)グローバル変数が名前空間を汚染することを避ける。
(4).操作と表現の精密化を許可します。
(5).クラスよりも柔軟性があります。
以上は小编が绍介したAndroidデザインモデルシリーズの一例モデルです。皆様のために何かご质问があれば、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。