对象与其成员之间的通信

时间:2012-01-22 18:45:09

标签: oop architecture observer-pattern

我对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();

所以,现在我希望每当他或她的盾牌被摧毁时人类就会尖叫。但盾无法称其所有者的方法。他只是不知道谁是它的主人。

再举一个例子。

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

};

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

所以,如果人群中只有不到10个人,现在我想让人群告诉所有人离开它。人群可以告诉这些命令,但每次有人在人群中死亡时都必须进行检查。因此,人类必须以某种方式告知人群他或她已经死亡,并要求人群重新检查其中的人数。

解决这种情况的明确方法是将指针保存在每个人的人群中。但它是倾销方式,因为人类可以在很多人群中。此外还存在同步问题(同样的问题,实际上,人群如何知道约翰离开它的事实?)。

我认为有一些触发机制可以解决这类问题。

感谢。

1 个答案:

答案 0 :(得分:3)

您要找的是observer pattern

通过观察者模式,人群将订阅人群中的人类,当人类发出“死亡”状态时,它可以重新检查计数。

同样地,对于可以发射“盾牌破坏”事件的盾牌,人类可以识别并开始大喊大叫。