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