比方说,如果在我们的对象设计中,已经有一个Car
类,现在有一些汽车对象就是敞篷车。
我们可以定义另一个 classConvertible
和 subclass Car
,但是假设我们稍后创建一个 class that is FourWheelDrive
that 也是 subclasses Car
,然后,如果我们有 a FourWheelDrive
that is also a Convertible
,那么我们该如何处理呢?
上面的设计与其他设计相比如何,它是类isConvertible
中的布尔值,Car
类中isFourWheelDrive
也是布尔值Car
,就像类的标志或属性一样Car
。所以在这种情况下我们不会定义额外的类。
更新:在一个真实的例子中,在我们的项目中,有一个Credential
类存储用户的信息:user_id、encrypted_password、email_address 等。当我们允许通过 Facebook、Gmail、Yahoo、MySpace(使用 JanRain)登录时,同事建议添加FacebookCredential
, GmailCredential
, YahooCredential
, 所有这些子类Credential
. 我有点不知所措,有这么多类,当你看到一个方法时,你必须看看是子类覆盖了它还是基类的方法。我会使用一个代码来告诉它是哪个凭据提供者(Facebook、Gmail 等),并使用这个提供者代码来做适当的事情。(例如,有些提供商已经验证了电子邮件地址,有些则没有)。所以我只是不知道我同事的方法是否更合适或更复杂。