Androidデザインモデルシリーズの一例モデル
シングルモデルは、GOFの23種類の設計モードの中で最も簡単なものと言えます。
このモードは他のいくつかのモードに比べて独立しています。自分の実用化された数量の単一を制御します。
Androidでは多くのところで単例モードが使われていますが、ここでは入力管理者のInputMethodManagerを例に分析を展開します。
シングルケースモードでは、Singleton Patternは、その特有の利点で、代替システムにおけるグローバル変数の応用が非常に広いです。
1.意図
一つのクラスが一例しかないことを保証し、その全体的なアクセスポイントを提供します。
ホットワード:単例の唯一の私有構造
2.構造
Androidには多くのシステムレベルのグローバル変数があります。例えば、時間、入力法、アカウント、ステータスバーなど、Androidではこれらに対して直接的または間接的に単例モードを使いました。
入力法を例にとって、上図を実際の状況に修正します。
非常に簡単ですが、上からもsynchronizedキーワードを見ました。マルチスレッドの環境下で、一例モードは自分のインスタンスの数を保証するために唯一、必ず同時制御をします。
このようなスレッドセキュリティの一例としては、プロセスをまたぐ一例、パラメータ化の一例などが挙げられますが、本論文の範囲を超えて多くのものに触れています。
3.コード:
4.効果
(1)パターンを作成します。
(2)一意のインスタンスに対する制御されたアクセス。
(3)グローバル変数が名前空間を汚染することを避ける。
(4).操作と表現の精密化を許可します。
(5).クラスよりも柔軟性があります。
以上は小编が绍介したAndroidデザインモデルシリーズの一例モデルです。皆様のために何かご质问があれば、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
このモードは他のいくつかのモードに比べて独立しています。自分の実用化された数量の単一を制御します。
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デザインモデルシリーズの一例モデルです。皆様のために何かご质问があれば、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。