gpt4 book ai didi

oop - 对象与其成员之间的通信

转载 作者:行者123 更新时间:2023-12-04 06:00:30 25 4
gpt4 key购买 nike

我有一些关于 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 人就离开它。人群中说出这样的命令是可以的,但是每次有人在人群中死亡时都必须执行此检查。所以,同样,人类必须以某种方式通知人群他或她已经死了,并要求人群重新检查其中的人数。

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

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

谢谢。

最佳答案

您要找的是observer pattern .

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

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

关于oop - 对象与其成员之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com