モチベーション(動機)
- 通知されたオブジェクト(対象物)の状態を変更し、すべての依存オブジェクト(オブザーバーオブジェクト) - ソフトウェアのビルド・プロセスでは、我々は、特定のオブジェクトのための「通知の依存関係」を確立する必要があります。そのような依存あまりにも密接にした場合、ソフトウェアは、変化に抵抗するために十分ではありません。
- オブジェクト指向技術を使用して、この依存性が弱く、安定した依存関係を形成することができます。疎結合ソフトウェアアーキテクチャを有効にします。
スキーマ定義
オブジェクトを相互定義の一種は、多くの関係(変動)を依存関係オブジェクト(件名)がそれに依存するすべてが通知され、自動的に更新され、状態が変化したときにそうすることを、。- 「デザインパターン」のGoF
構造(構造)
持ち帰り
- 抽象オブジェクト指向、オブザーバーパターン我々はターゲットを変更して、独立して、観察者のことができるように、ので、2つの間の依存性を達成することが疎結合。
- ターゲットは、視聴者を指定せずに通知を送信すると、通知自動的に伝播されている(通知情報をパラメータとして運ぶことができます)。
- 通知をサブスクライブするかどうかを決定するために、視聴者は、観客は何も知りません。
- オブザーバーモデルは非常に一般的なデザインパターンの場合のUIフレームワークをベースに、それはまた、MVCパターンの重要な部分です。
WindowsのLinuxのコンソールの下のプログレスバーが異なっています
クラスFileSplitter { 文字列m_filePath; int型m_fileNumber; プログレスバー * m_progressBar; // の役割:特定の通知コントロール // 抽象通知メカニズムを交換してください。抽象への移行完了したコンクリートは、 * / 実装の詳細に依存し、設計原理依存反転原則に反し、層モジュールは、両方が抽象的に依存しなければならない、低レベルのモジュールに依存してはならない 、GUIに図のストリップになりましプログラム制御の場合台湾プログラムは、それが黒のドットで、そのプログラムのスケジュールを示して? * / パブリック: (FileSplitter CONST 文字列&filePathに、INTファイル番号、プログレスバー* :プログレスバー) m_filePath(filePathに)、 m_fileNumber(ファイル番号)、 m_progressBar(プログレスバー){ } ボイドスプリット(){ @ 1つの大容量のファイルを読み込む // 2.小型バッチファイルに書き込む ために(int型 I = 0 ; I <m_fileNumber; I ++ ){ // ... フロート progressValue = m_fileNumber; progressValue =(I + 1)/ progressValue; m_progressBar - >のsetValue(progressValue); // プログレスバーを更新する } } }; このクラスのMainForm:公共のForm1 { テキストボックス * txtFilePath、 テキストボックス * txtFileNumber。 プログレスバー *プログレスバー。// 进度条 公共: ボイドのButton1 Click(){ 文字列 filePathに= txtFilePath-> のgetText(); INT番号= ATOI(txtFileNumber-> のgetText()c_str())。 FileSplitterスプリッタ(filePathに、数、プログレスバー)。 splitter.split(); } }。