假設我有一個門一個定義: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