【问题标题】:Communication between object and its members对象及其成员之间的通信
【发布时间】:2012-01-22 18:45:08
【问题描述】:

我有一些关于 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();

所以,现在我希望人类每次他或她的盾牌被摧毁时都会尖叫。但是shield没有办法调用它的所有者的方法。他只是不知道它的主人是谁。

再举一个例子。

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

};

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

所以,现在我想让人群告诉所有人,如果人群中少于 10 人,请离开它。人群可以说出这样的命令,但是每次有人在人群中死亡时都必须执行此检查。因此,再次,人类必须以某种方式通知人群他或她已经死了,并要求人群重新检查其中的人数。

解决这种情况的明确方法是将指向人群的指针保存在每个人身上。但这是垃圾方式,因为人类可以在很多人群中。这里也存在同步问题(实际上,同样的问题,群众怎么知道约翰离开的事实?)。

我相信存在一些触发机制来解决这类问题。

谢谢。

【问题讨论】:

    标签: oop architecture observer-pattern


    【解决方案1】:

    您正在寻找的是observer pattern

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

    同样的,盾牌可以触发“盾牌破裂”事件,人类可以识别并开始大喊。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 2011-10-14
      相关资源
      最近更新 更多