Java2D和Swing是否可以很好地利用OOP?

时间:2012-02-26 07:25:09

标签: java swing oop inheritance

过度使用继承?

Java Swing和Java2D在很大程度上依赖于继承。大多数人告诉我,我应该尽可能地避免继承,并且只在必要时使用它。那么在Java2D和Java Swing中广泛使用继承是否合理?

适配器模式

我听到了很多关于适配器模式的赞誉,我听到了很多批评。然而,我从所有这些中收集到的是,如果在正确的位置使用,适配器模式仅被认为是好的设计。适配器模式的不相关使用会导致人们阅读您的代码以显示皱眉。适配器模式是否在两个Java API中正确且相关地使用?

单身

这两种API也倾向于使用相当数量的单身人士。这好吗?

问题

那么,Java2D Api和Java Swing是面向对象编程接口的一个很好的例子吗?我应该在我的代码中使用他们的技术吗?

3 个答案:

答案 0 :(得分:2)

我对此并不确定,但我可以提出一些想法:

  • 继承:假设您优先使用接口和组合而不是Swing中的重用继承,那么您需要进行大量的转发(ComponentJComponent几十种方法)

  • 适配器模式:见上文

  • 单身人士:他们适合模拟真正独特的系统部分(我同意java.awt.Desktop可以作为单身实现 - 即使它使用工厂方法)

  • 整体设计:您可以选择按结果来判断事物 - Swing功能强大,可扩展且广泛使用。

答案 1 :(得分:1)

我的一位与Swing合作的朋友不断抱怨这是一个抽象的泥沼。在运行时确定对象的行为涉及拼凑一个奇怪的继承功能拼贴。从我所看到的,我倾向于同意。

答案 2 :(得分:-1)

  

继承是一个有用的编程概念,但它易于使用   不适当。

     

继承是一个很好的选择:

     
      
  1. 您的继承层次结构表示“is-a”关系,而不是“has-a”关系。
  2.   
  3. 您可以重用基类中的代码。
  4.   
  5. 您需要将相同的类和方法应用于不同的数据   类型。
  6.   
  7. 类层次结构相当浅,其他开发人员也是如此   不太可能增加更多级别。
  8.   
  9. 您希望通过更改a来对派生类进行全局更改   基类。
  10.   

微软文章here和另一个好文章here