我对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个人,现在我想让人群告诉所有人离开它。人群可以告诉这些命令,但每次有人在人群中死亡时都必须进行检查。因此,人类必须以某种方式告知人群他或她已经死亡,并要求人群重新检查其中的人数。
解决这种情况的明确方法是将指针保存在每个人的人群中。但它是倾销方式,因为人类可以在很多人群中。此外还存在同步问题(同样的问题,实际上,人群如何知道约翰离开它的事实?)。
我认为有一些触发机制可以解决这类问题。
感谢。
答案 0 :(得分:3)
您要找的是observer pattern。
通过观察者模式,人群将订阅人群中的人类,当人类发出“死亡”状态时,它可以重新检查计数。
同样地,对于可以发射“盾牌破坏”事件的盾牌,人类可以识别并开始大喊大叫。