2

如果我们从 HashMap 的角度来看,变量 step 是 hashCode 和 equals 的计算。使用 hashCode 和 equals 方法 HashMap 可以改变算法来实现散列。它不能改变的是为给定类型 T 的对象计算 hashCode 和 euals 的策略。基于上述论点,我认为它不符合策略模式的定义。

我对么?

4

2 回答 2

5

它的实现方式不是策略模式。如果它看起来更像:

class HashMap {
    private final HashingStrategy strategy;

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

那么这将是一个策略模式。相反,它更像是:

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

为了得到一个对象的哈希码,哈希图向对象询问它的​​哈希码,它不决定如何计算它。策略模式是当您可以插入各种算法来执行特定步骤时,这更多地将责任委托给对象。

于 2013-08-23T17:45:52.460 回答
1

策略模式 - Wiki

如果您在策略模式的上下文中比较您的示例,您会发现:

  • 客户端是HashMap,
  • 上下文是对象,并且
  • 策略是 hashCode() 和 equals() 方法。

现在,如果您在这里看到策略和上下文是紧密耦合的,并且对于策略模式,您的上下文和策略应该彼此解耦,这样您就可以灵活地为给定上下文切换策略,而无需更改客户端代码。

于 2013-08-26T04:49:47.990 回答