首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于类型检查来确定状态是一种代码味道吗?

基于类型检查来确定状态是一种代码味道吗?
EN

Stack Overflow用户
提问于 2012-02-10 13:11:54
回答 1查看 298关注 0票数 2

我正在设计一个可以根据状态改变其行为的对象。如果其属性包含可以是各种类型的对象,则为一种类型。下面是一个例子:

代码语言:javascript
复制
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状态的方式上可能会受到它的类型的影响。

在我看来,以这种方式检查对象类型是不对的。我是闻到了异味,还是我只是在想象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-10 13:18:54

在我看来确实有点难闻。一个更好的选择是使用眼镜的一些多态行为。也许是像这样的虚拟方法..。

代码语言:javascript
复制
bool goesWithBoots()

这在大多数情况下返回TRUE,但对于太阳镜则返回FALSE。

这样做的好处是,您可以通过添加其他类型的眼镜来扩展代码,并且它们可以自己决定是否“搭配眼镜”-而且您不必担心每次添加其他类型的眼镜时是否需要修改putOnBoots()方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9223018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档