如果我们从 HashMap 的角度来看,变量 step 是 hashCode 和 equals 的计算。使用 hashCode 和 equals 方法 HashMap 可以改变算法来实现散列。它不能改变的是为给定类型 T 的对象计算 hashCode 和 euals 的策略。基于上述论点,我认为它不符合策略模式的定义。
我对么?
如果我们从 HashMap 的角度来看,变量 step 是 hashCode 和 equals 的计算。使用 hashCode 和 equals 方法 HashMap 可以改变算法来实现散列。它不能改变的是为给定类型 T 的对象计算 hashCode 和 euals 的策略。基于上述论点,我认为它不符合策略模式的定义。
我对么?
它的实现方式不是策略模式。如果它看起来更像:
class HashMap {
private final HashingStrategy strategy;
private int computeHash(object) {
return strategy.hash(object);
}
}
那么这将是一个策略模式。相反,它更像是:
class HashMap {
private int computeHash(object) {
return object.hashCode();
}
}
为了得到一个对象的哈希码,哈希图向对象询问它的哈希码,它不决定如何计算它。策略模式是当您可以插入各种算法来执行特定步骤时,这更多地将责任委托给对象。
如果您在策略模式的上下文中比较您的示例,您会发现:
现在,如果您在这里看到策略和上下文是紧密耦合的,并且对于策略模式,您的上下文和策略应该彼此解耦,这样您就可以灵活地为给定上下文切换策略,而无需更改客户端代码。