10

我被分配了一个编程任务,我必须做的一件事是实现一个包装器方法,它依赖于另一种方法来将坐标从最低到最高排序。我不确定实现包装器方法的确切含义。

static void sortCoordsByZ(double[][] coords) {
    //implement the wrapper method for the recursive sort method. all work is done the recursive sort method
}

static void recursiveSort(double[][] coords, int lo, int hi) {
    //recursive sort method
}
4

6 回答 6

14

包装器方法是适配器外观;它为现有方法提供了一个替代接口。

您被要求编写一个外观(facade)——为不需要指定高值和低值的客户端提供更简单的接口。

于 2009-11-15T01:17:50.450 回答
10

您现在通过在 Stack Overflow 上询问您的作业问题来充当包装器方法!

包装方法通过向“专家”方法询问答案来回答问题。一般来说,它会做三件事:

  1. 它以“专家”方法可以理解的方式构建问题。
  2. 它向“专家”方法提出问题
  3. 它可以很容易地为呼叫者提供正确的格式。

在您的情况下,“专家”方法是recursiveSort(),并且您的sortCoordsByZ()方法必须recursiveSort()使用正确的参数进行调用,然后可能在返回之前对答案进行一些处理。

于 2009-11-15T03:16:52.743 回答
8

当您实现包装方法时,您实际上是在编写现有方法的变体,通常是因为现有方法不能满足您当前的要求。原始方法可能太复杂(参数太多),或者它可能无法完成所需的事情,这意味着您必须编写一个包装器(或重载)来完成原始方法没有的额外工作。通常在编写包装器时,您仍然会利用原始函数来完成它所做的一切,并用包装器填补空白。

于 2009-11-15T01:19:37.733 回答
3

它包装了另一种方法 :) 可能它添加了一些额外的参数,例如在您的情况下 lo 和 hi 的初始值,并充当您的排序的入口点。

于 2009-11-15T01:16:59.737 回答
3

在那种情况下,如果它通过一个名为 coords 且所有插槽都已填满的数组,我不应该只需要在“按 z 排序”方法中输入这些吗?

recursiveSort(coords, 0, coords.length-1);
于 2009-11-15T05:54:20.410 回答
2

包装方法可用于抽象、标准化和重构

例如,如果您导入一个特殊帮助方法库并在整个应用程序中使用它们,然后决定切换到另一个库,它将为您提供更多功能,然后您将不得不重写调用以前库方法的每一行代码调用新的库方法。随着应用程序达到成千上万行,这是一项艰巨的任务。当软件获得许可时,这种情况会更频繁地发生,然后在它到期时选择一个新选项。

要解决此问题,您可以将所有 Helper 方法包​​装在您自己的方法中。这些方法只是调用导入库中的方法的 1 行。您将在整个应用程序中调用所有包装器方法,而不是直接调用导入的库。

现在,当您想要导入新库时,所有抽象的好处都出现了。而不是重写应用程序中的每个调用,您只需重写应该是它自己的类的包装器方法。现在更改包装类中的 1 个方法会更新使用该方法的整个应用程序。(有关示例,请参见 MVC4 .NET HTML Helper 方法)

在标准化的主题上,包装器可用于为创建对象时手动设置的许多内容设置默认值。但是现在,如果它们被设置在包装器中,则不再必须在每次调用原始方法时都设置它们。例如,您可以在 Gridview 包装器中设置网格视图的尺寸,现在当您在应用程序中调用包装器方法时,所有网格视图都具有相同的尺寸,并且在整个应用程序中需要维护的代码行数更少;也完成了重构。

于 2013-12-21T22:32:13.883 回答