类设计、接口或具体类

发布于 09-29 10:44 字数 268 浏览 5 评论 0原文

我对接口与具体类的使用有疑问。
我有一个实现一些常见属性/方法的基类。现在我有两个可能的扩展。该基类可以具有一些称为“参数”的属性,或者可以具有另一个称为“子项”的属性,或者可以同时具有这两个属性。

在我看来,我可以创建 2 个接口(IParameterized、IParent),也可以实现三个子类(ParameterObject、ParentObject、ParentParameterObject)。问题是,哪一种设计更好。我目前倾向于接口方法,但我不是一个经验丰富的程序员,所以欢迎任何建议

I have a problem regarding the use of interfaces vs concrete classes.
I have a base class that implements some common properties/methods. Now i have two possible extensions. Either this base class can have some property called Parameters, Or it can have another property called Children, or it can have both.

The way i see it i could create either 2 interfaces (IParameterised, IParent) or i could implement three subclasses (ParameterObject, ParentObject, ParentParameterObject). The question is, which one of these is better design. I'm leaning towards the interface method at the moment but im not an experienced programmer so any advise is welcome

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凤舞天涯2024-10-06 10:44:22

我认为你的“倾向”是正确的,其他人也会同意:
http://www.artima.com/lejava/articles/designprinciples4.html

I think your "leaning" is the correct one myself, and others would agree:
http://www.artima.com/lejava/articles/designprinciples4.html

花开半夏魅人心2024-10-06 10:44:22

关于这个主题的一些背景知识应该可以帮助您继续下去:里氏替换原则(更多此处)和组合优于继承的概念。

简而言之,不要实现 3 个子类(即继承方法):如果您以后需要 2 或 3 个额外的公共属性/方法,会发生什么?只需添加 2 个元素,您就会看到 15 种左右的独特组合。对于组合,请查看 state策略模式。

Some backgrounds on this topic that should get you going: the Liskov substitution principle (more here) and the concept of composition over inheritance.

In short, do not implement the 3 subclasses (i.e., the inheritance approach): what will happen if you need 2 or 3 additional common properties/methods down the road? With just 2 additions you are looking at 15 or so unique combinations. For composition, look into the state and strategy patterns.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文