如果我们从HashMap的角度来看,变量步骤是计算hashCode和equals。 使用hashCode和equals方法HashMap可以改变算法以实现散列。 它不能改变的是计算给定类型T的对象的hashCode和euals的策略。 基于以上论点,我认为它不适合策略模式的定义。
我说错了吗?
答案 0 :(得分: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会询问对象的哈希码,但不会决定如何计算它。策略模式是当您可以插入各种算法来执行特定步骤时,这是对该对象的更多委托责任。
答案 1 :(得分:1)
如果您在策略模式的上下文中比较您的示例,您会发现:
现在,如果您在此处看到策略和上下文紧密耦合,并且对于策略模式,您的上下文和策略应该彼此分离,这样您就可以灵活地切换给定上下文的策略,而无需更改客户端代码。