如果我們從HashMap的角度來看變量步是計算hashCode和equals。 使用hashCode和equals方法HashMap可以改變算法實現散列。 它不能改變的是計算給定類型T的對象的hashCode和euals的策略。 基於上述論點,我認爲它不符合策略模式的定義。是java哈希碼,等於策略模式的示例
我正確嗎?
如果我們從HashMap的角度來看變量步是計算hashCode和equals。 使用hashCode和equals方法HashMap可以改變算法實現散列。 它不能改變的是計算給定類型T的對象的hashCode和euals的策略。 基於上述論點,我認爲它不符合策略模式的定義。是java哈希碼,等於策略模式的示例
我正確嗎?
它實施的方式不是戰略模式。如果它看起來更像:
class HashMap {
private final HashingStrategy strategy;
private int computeHash(object) {
return strategy.hash(object);
}
}
然後這將是一個戰略模式。相反,它更像是:
class HashMap {
private int computeHash(object) {
return object.hashCode();
}
}
獲取對象的哈希碼,HashMap的詢問對象的哈希碼,它並沒有決定如何計算它。策略模式是當您可以插入各種算法來執行特定步驟時,這會將責任更多地分配給對象。
嗯,看起來像委託模式......但我也缺少這裏的術語 – mike
雖然可以在許多Java數據結構中使用的比較器
如果在戰略格局的背景下比較的例子,你會發現:
現在,如果你在這裏看到的策略和上下文緊密耦合,以及戰略格局的背景和戰略應相互分離,這樣就可以有切換策略,對於給定的範圍內的靈活性,而不改變客戶端代碼。
我想這取決於你在哪裏得到「戰略模式」的定義。 –
多態性與策略模式不是一回事。 – Raedwald