2013-08-23 36 views
2

如果我們從HashMap的角度來看變量步是計算hashCode和equals。 使用hashCode和equals方法HashMap可以改變算法實現散列。 它不能改變的是計算給定類型T的對象的hashCode和euals的策略。 基於上述論點,我認爲它不符合策略模式的定義。是java哈希碼,等於策略模式的示例

我正確嗎?

+0

我想這取決於你在哪裏得到「戰略模式」的定義。 –

+0

多態性與策略模式不是一回事。 – Raedwald

回答

5

它實施的方式不是戰略模式。如果它看起來更像:

class HashMap { 
    private final HashingStrategy strategy; 

    private int computeHash(object) { 
     return strategy.hash(object); 
    } 
} 

然後這將是一個戰略模式。相反,它更像是:

class HashMap { 
    private int computeHash(object) { 
     return object.hashCode(); 
    } 
} 

獲取對象的哈希碼,HashMap的詢問對象的哈希碼,它並沒有決定如何計算它。策略模式是當您可以插入各種算法來執行特定步驟時,這會將責任更多地分配給對象。

+0

嗯,看起來像委託模式......但我也缺少這裏的術語 – mike

+0

雖然可以在許多Java數據結構中使用的比較器模式是一種策略。不知道爲什麼他們停在那個地方,並沒有像C++那樣創建一個'Hash '策略。 –

1

Strategy Pattern - Wiki

如果在戰略格局的背景下比較的例子,你會發現:

  • 客戶端是HashMap中,
  • 上下文是對象,
  • 策略是hashCode() 和equals()方法。

現在,如果你在這裏看到的策略和上下文緊密耦合,以及戰略格局的背景和戰略應相互分離,這樣就可以有切換策略,對於給定的範圍內的靈活性,而不改變客戶端代碼。