2
我正在研究一個對象的設計,該對象根據其狀態改變其行爲。一個如果它的屬性擁有可以是各種類型的對象。這裏有一個例子:正在確定基於類型檢查代碼的狀態嗎?
class Person {
// many types of glasses available
protected $glasses;
public function putOnBoots()
{
// does this type check smell?
if ($this->glasses instanceof SunGlasses) {
trigger_error('never wear boots with sunglasses');
return false;
}
// [...] put on boots
return true;
}
public function lookAtStuff ($stuff)
{
// glasses provides polymorphic behavior here
return $this->glasses->filter($stuff);
}
}
應當指出的是,$glasses
沒有其他地方提供了自成一多態行爲,因此類型更大的目的。但是有一些行爲(如putOnBoots()
)並不覺得他們應該屬於$glasses
,即使他們可能受其類型的影響,如何表示Person
的狀態。
以這種方式檢查對象類型的東西感覺不對我。我是否會檢測到異味,或者我只是想象中的東西?
不錯 - 我喜歡它!我的擔心是有明確的類型檢查,你的建議很好地消除了。它確實把眼鏡和靴子搭配在一起。我不確定眼鏡應該知道關於靴子的任何事情。真正關心組合的人。 – dellsala 2012-02-10 05:26:01
後來我意識到......如果是人物的偏好,而不是眼鏡,那麼這是行不通的。如果其他人喜歡戴着帶靴子的太陽鏡,那麼你需要一個不同的解決方案。 :(我確信有一個,但目前我還沒有想到。 – aldo 2012-02-10 05:49:31