3

与白盒重用相比,使用黑盒重用的优点/缺点是什么?

4

4 回答 4

9

根据我的经验,白盒重用通常是通过继承完成的,而黑盒是通过组合完成的。

白盒重用

Pro:您可以自定义模块以适应特定情况,这允许在更多情况下重用
Con:您现在拥有自定义结果,因此它增加了您的代码复杂性。

黑盒重用

优点:简单和清洁
缺点:很多时候这是不可能的

判决:

我尽可能喜欢黑盒子。

于 2008-09-19T03:23:18.480 回答
3

白盒:

优点:

  • 简单(非常自然的概念)
  • 你对事情有更多的控制权

缺点:

  • 需要有关组件内部的内在知识
  • 可能难以实现(OO 继承约束)
    ,有时会导致继承链损坏\不正确

黑盒子:

优点:

  • 低耦合(提供后期绑定和其他好处)

缺点:

  • 不明显(代码更难理解)
  • 接口比类更脆弱(即接口与继承)
于 2008-09-19T02:37:39.617 回答
2

我不确定这些具体术语是什么意思,所以在继续之前,我将尝试定义它们是什么:

  • 黑盒重用是在不同的项目中使用未经修改的类/函数/代码
  • 白盒重用是从一个项目中获取一个类/函数/代码并对其进行修改以适应另一个项目的需要。

黑盒重用的优点是,一旦代码被编写、调试和测试,你可以在不同的情况下无数次地重用它。缺点是真正可重用的黑盒代码很少见,并且可能需要花费时间和精力来格式化 API 和调用代码并使其与黑盒方法一致(没有上下文泄漏)。

白盒重用的优点是您确实可以多次使用您的代码,而不必先将其从原始项目中解脱出来。您只需复制和修改即可。这种类型的重用更为常见,但也有一些缺点。大多数情况下,如果您在一个实现中发现错误,您需要检查以确保它在所有其他实现中都已修复。如果它们像经常发生的那样大相径庭,这可能会很困难。

于 2008-09-19T02:40:47.927 回答
1

@凯尔,

黑盒重用意味着您在不知道其内部结构的情况下使用组件。您所拥有的只是一个组件接口。

白盒重用意味着您知道组件是如何实现的。通常白盒重用意味着类继承。

于 2008-09-19T02:50:24.063 回答