是java hashcode和equals策略模式的例子

时间:2013-08-23 17:00:16

标签: java design-patterns

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

我说错了吗?

2 个答案:

答案 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)

Strategy Pattern - Wiki

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

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

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