2013-08-23 31 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()方法。

现在,如果你在这里看到的策略和上下文紧密耦合,以及战略格局的背景和战略应相互分离,这样就可以有切换策略,对于给定的范围内的灵活性,而不改变客户端代码。