我试图了解好的合同在哪里结束,而偏执狂从哪里开始。真的,我只是不知道优秀的开发人员应该关心什么以及他应该忽略什么:)
假设我有一个保存值的类,比如 java.lang.Integer。它的实例由其他对象(MappedObjects)聚合(一对多或多对多),并且经常在 MappedObjects 的方法中使用。此外,出于性能原因,我还在 TreeMap(guava MultiMap,没关系)中跟踪这些关系,以便能够对绑定到某个整数键范围的 MappedObjects 进行快速迭代。因此,为了使系统保持一致状态,我应该修改 MappedObject.bind(Integer integer) 方法来更新我的 Map,如:
class MappedObject {
public void bind (Integer integer) {
MegaMap.getInstance().remove(fInteger, this);
fInteger = integer;
MegaMap.getInstance().add(fInteger, this);
}
...
private Integer fInteger;
}
我可以用这个 final 方法创建抽象的 MappedObject 类,强迫其他人从它继承,但这很粗鲁。如果我将 MappedObject 定义为带有方法 bind() 的接口并提供骨架实现——其他开发人员稍后可能会忘记将其包含在对象中并在不更新 Map 的情况下自行实现方法。