オブザーバーパターン
定義観察者(観察)モード:
手段は、複数のオブジェクト間に存在する-to-多くのオブジェクトの状態が変化するが、依存性、
それに依存するすべてのオブジェクトが通知されており、自動的に更新します。
このモードは、時にはと呼ばれるモデル、モデルサブスクライブ- -パブリッシュビューモードを、そのオブジェクトの行動パターンです。
抽象話題(テーマ)の役割は:
また、凝集を提供する抽象オブジェクトクラスとして知られており、オブザーバオブジェクトを保持するためのクラスを増加させる、オブジェクトのオブザーバメソッドを削除し、
そして抽象メソッドのすべてのオブザーバに通知します。
特定のトピック(コンクリート件名)の役割:
また、特定の対象クラスとして知られている通知方法の抽象的な目標を実現し、
時に内部状態、特定のテーマの変更、登録済みのすべてのオブザーバーオブジェクトを通知します。
抽象観測者(オブザーバー)の役割は:
それは受け取る変更通知特定のテーマが呼び出され、更新彼の抽象メソッドが含まれ、抽象クラスまたはインタフェースです。
特定の観測者(コンクリートオブザーバー)の役割:
変更通知の目標を取得するときに自分のステータスを更新するために実装される抽象オブザーバーで定義された抽象メソッド。
1つの インポートjava.util.ArrayListのの、
2 インポートjava.util.Listに;
3
。4つの パブリック クラスオブザーバ{
5 パブリック 静的 ボイドメイン(文字列[]引数){
6 供するサブ= 新しい新しいConcreteSubject();
7 sub.add(新しい新しいObservering1 ());
8 sub.add(新しい新しいObservering2());
図9 ((ConcreteSubject)SUB).change( "ラ・イメージチェンジ" );
10 }
11 }
12は
13である 。// 最初の観察者の親であり、それはオブザーバーを装着関数への参照のコレクションを維持します。
14 抽象 クラス供する{
15 // 观察者集合
16 プライベートリスト<Observering> ARR = 新規のArrayList <Observering> ();
17
18 公共 ボイド追加(Observering OB){
19 arr.add(OB)。
20 }
21
22 公共 ボイド削除(Observering OB){
23 arr.remove(OB)。
24 }
25
26 // 通知观察者
27 公共 ボイド更新(文字列newstatue){
28 のために(int型私= 0; 私はarr.size <(); 私は++ ){
29 Observering observering = arr.get(I)。
30 observering.update(newstatue)。
31 }
32 }
33 }
34
35 // 具体的被观察者对象
36 クラス ConcreteSubjectが延び供する{
37 プライベート文字列の像を、
38
39 公共ストリングgetStatue(){
40 リターン像。
41 }
42
43 公共 ボイドsetStatue(文字列の像){
44 この .statue = 彫像。
45 }
46
47 公共 ボイド変化(文字列statuee){
48 彫像= statuee。
49 更新(statuee)。
50 }
51 }
52
53 // 观察者
54 インターフェイスObservering {
55 公共 ボイド更新(文字列の像)。
56 }
57
58 クラス Observering1が実装Observering {
59 プライベート文字列の像を、
60
61 @Override
62 公共 ボイド更新(文字列statuee){
63 彫像= statuee。
64 のSystem.out.println(statuee + "---快走" )。
65 }
66 }
67
68 クラス Observering2は実装Observering {
69 プライベート文字列の像を、
70
71 @Override
72 公共 ボイド更新(文字列statuee){
73 彫像= statuee。
74 のSystem.out.println(statuee + " -快----跑---" )。
75 }
76 }