【发布时间】: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