首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象与其成员之间的通信

对象与其成员之间的通信
EN

Stack Overflow用户
提问于 2012-01-23 02:45:09
回答 1查看 137关注 0票数 2

我有一些关于OOP架构的深层次的问题。

在对象和它的成员之间进行通信的合适方式是什么?

让我用一些例子来解释我的意思。(我使用C++,但它与问题完全无关。)

代码语言:javascript
复制
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没有办法调用它的所有者的方法。他只是不知道谁是它的主人。

再举一个例子。

代码语言:javascript
复制
class Human
{
    //...
    void die();

};

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

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

解决这种情况的明确方法是在每个人身上保存指向人群的指针。但这是一种倾倒的方式,因为人类可以在许多人群中。这里还有同步问题(实际上,同样的问题,人群如何知道John离开它的事实?)

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-23 03:25:01

你要找的是observer pattern

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8963612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档