如果我们从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