2009-11-15 23 views
7

我得到了一個編程任務,我必須做的其中一件事是實現方法,即使用另一種方法從最低到最高排序座標的包裝方法。我不確定實現一個包裝器方法的意義。「實現包裝方法」是什麼意思?

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 
} 
+0

@Dougman--目前尚不清楚這是否是家庭作業(我爲某人在工作中得到'編程作業'),所以我除去了標籤,除非詢問者另有說明。請參閱http://meta.stackexchange.com/questions/11189/what-to-do-do-about-tag-abuse。 – 2009-11-16 14:44:25

回答

2

它包裝:)也許它增加了一些額外的參數,如與和LO的初始值,在您的案件喜作爲切入點,以您的排序的另一種方法。

9

包裝方法是adapterfaçade;它爲現有方法提供了一個替代接口。

你被要求寫一個façade(facade) - 爲客戶提供一個更簡單的接口,不需要指定高值和低值。

5

當您實現包裝方法時,通常是因爲現有方法不能滿足您當前的要求,所以您正在有效地編碼現有方法的變體。原始方法可能太複雜(參數太多),或者它可能不完成所需的事情,這意味着您必須編寫一個包裝器(或重載),以完成原始方法不需要的額外工作。通常在編寫包裝器時,你仍然可以利用原始函數做任何事情,並用你的包裝器填補空白。

7

您現在通過在堆棧溢出中詢問您的任務問題來充當包裝方法!

包裝方法通過詢問「專家」方法來回答問題。一般來說,它有三件事:

  1. 它以「專家」方法可以理解的方式來構思問題。
  2. 它要求「專家」方法的問題
  3. 它做了一些容易的答案,以正確的格式爲調用者。

在你的情況,「專家」的方法是recursiveSort(),你的sortCoordsByZ()方法將不得不調用recursiveSort()用正確的參數,然後也許做的答案東西返回之前。

3

在這種情況下,如果它需要通過一個名爲coords的數組,並且它的所有槽已被填充,那麼我是否需要在「sort by z」方法中加入?

recursiveSort(coords, 0, coords.length-1); 
+0

是的,這正是你應該做的。 – bcat 2009-11-15 05:57:36

1

包裝方法可用於提取,標準化和重構

例如,如果你輸入的特殊輔助方法庫,並通過使用它們您的應用程序,然後再決定要切換到不同庫會給你更多的功能,你將不得不重寫每一行調用前面的庫方法來調用新庫方法的代碼。隨着應用程序達到數十和數十萬行,這是一項艱鉅的任務。當軟件獲得許可時,更頻繁地發生這種情況,然後在到期時選擇新的選項。

要解決這個問題,你可以把所有的Helper方法包裝在你自己的方法中。這些方法只需1行,即可在您導入的庫中調用Methods。你可以調用所有的包裝方法,而不是直接調用導入的庫。

現在,當您想要導入新庫時,所有抽象的好處就出現了。與其在應用程序中重寫每個調用,您可以簡單地重寫應該是它自己的類的包裝器方法。現在,在包裝類中更改1方法會更新使用該方法的整個應用程序。 (有關示例,請參閱MVC4 .NET HTML幫助程序方法)

關於標準化的主題,可以使用包裝設置創建對象時手動設置的許多事物的默認值。但是現在,如果它們被設置在包裝器中,那麼每次調用原始方法時都不必再設置它們。例如,您可以在Gridview包裝器中設置網格視圖的維度,現在,當您在應用程序中調用包裝器方法時,所有網格視圖都具有相同的尺寸,並且需要在整個應用程序中維護較少的代碼行;也完成重構。