我有一些关于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人,就离开它。在人群中发出这样的命令是可以的,但每次有人在人群中死亡时,都必须执行这种检查。因此,人类必须以某种方式通知人群他或她已经死亡,并要求人群重新检查其中的人数。
解决这种情况的明确方法是在每个人身上保存指向人群的指针。但这是一种倾倒的方式,因为人类可以在许多人群中。这里还有同步问题(实际上,同样的问题,人群如何知道John离开它的事实?)
我相信有一些触发机制可以解决这类问题。
谢谢。
发布于 2012-01-23 03:25:01
你要找的是observer pattern。
使用观察者模式,人群将订阅人群中的人类,当人类发出“死亡”状态时,它可以重新检查计数。
同样,对于可以发射“盾牌破损”事件的盾牌,人类可以识别并开始叫喊。
https://stackoverflow.com/questions/8963612
复制相似问题