2012-01-22 8 views
2

OOPアーキテクチャについて深い疑問があります。オブジェクトとそのメンバー間の通信

オブジェクトとそのメンバー間で通信する適切な方法は何ですか?

いくつか例を挙げて説明します。 (私はC++を使用しますが、それは全く問題に関連していない。)

class Shield 
{ 
    int toughness; 
    //... 

    void broke(); 
}; 

class Human 
{ 
    String name; 
    int age; 
    //... 
    Shield my_shield; 

    void scream(); 
    void equip_shield(Shield); 
}; 

Human vadim; 
Shield aegis; 

vadim.equip_shield(aegis); 
aegis.destroy(); 

だから、今私は、人間が自分のシールドが破壊されるたびに悲鳴たいです。しかし、盾は所有者の方法を呼び出す方法がありません。彼はちょうど誰がその所有者か分からない。

さらに1つの例です。

class Human 
{ 
    //... 
    void die(); 

}; 

class Crowd 
{ 
    vector<Humans> people; 
    //... 
}; 

だから、今私は、群衆が群衆の中に10未満の人がいる場合は、それを残してすべての人に伝えたいです。そのようなコマンドを伝えるのは大変ですが、誰かが群衆で死ぬたびにこのチェックを実行する必要があります。だから、人間は何とか群衆に何者かを知らせなければならない。

この状況を整理する明確な方法は、すべての人間の群衆にポインタを保存することです。しかし、それは人間が多くの群衆にいる可能性があるので、ダンプの方法です。また、ここでは同期の問題があります(同じ問題です、実際に、ジョンがそれを残したという事実を群衆がどのように知ることができますか?)。

この種の問題を解決するためのトリガーメカニズムがいくつか存在すると私は信じています。

ありがとうございました。

答えて

3

あなたが探しているのはobserver patternです。

観客パターンでは、群衆は群衆の中の人間を購読し、人間が「死」状態を出すと、カウントを再チェックすることができます。

同様に、人間が認識して叫ぶことができる「シールドブレイク」イベントを発生させる可能性のあるシールドの場合。

関連する問題