假设我有一个门一个定义:OOD和主客混乱
class Door
{
public void Lock()
{
// lock the door
}
}
这似乎是有意义的我,至少一段时间。但现在,我不太确定。如果我有一个想要锁门的Person对象,他会调用一个Door.Lock()。但在现实生活中,我们不会通过告诉门锁自己来锁门。
似乎更准确的情况模型是人能够直接修改门的状态,只要他有足够的能力锁门。例如,aCat不应该能够设置aDoor.IsLocked = true。我可以看到如何与性能做到这一点,如果他们支持的参数:
class Person
{
public void LockDoor(Door door)
{
door.IsLocked(this) = true;
}
}
class Door
{
bool isLocked;
public bool IsLocked(Person person)
{
set
{
if(person != null) // ensure there is a real person trying to lock the door
{
this.isLocked = value;
}
}
}
}
static void Main()
{
Person personFromThinAir = new Person();
Door doorFromThinAir = new Door();
personFromThinAir.LockDoor(doorFromThinAir);
}
相反,我们所能做的就是:
class Person
{
public void LockDoor(Door door)
{
door.SetLocked(this, true);
}
}
class Door
{
bool isLocked;
public void SetLocked(Person person, bool locked)
{
if(person != null)
{
this.isLocked = locked;
}
}
}
显然,这两个类是强耦合,并且都可能会有在实际代码中提取的接口,但这不是我所掌握的。我的问题是,这是模拟两个对象之间关系的更好方法吗?有没有比这更好的方法?我对它的考虑越多,我可以做出的Do.O.Lock()的感觉就越少;它似乎违反了面向对象的设计。
好说 - 打字比我快! – 2009-07-27 16:27:30