I have an interface called Work
public class interface Work {
boolean completeWork(Job j);
}
Then I have a Composite class
public class CompositeWork implements Work {
private Set<Work> childWork = new HashSet<>();
public boolean completeWork(Job j) {
return childWork.stream().allMatch(w -> w.completeWork(j));
}
public void addWork(Work w) {
childWork.add(w);
}
}
I have a different Work types are the follwoing:
public class EasyWork implements Work {
public boolean completeWork(Job j) {
<do some work>
}
}
public class HardWork implements Work {
private String id;
public Hardwork(String id) {
this.id = id;
}
public boolean completeWork(Job j) {
<do some work>
}
}
Client populate CompositeWork something like this
public class Client {
public static void main(String[] args) {
CompositeWork workHolder = new CompositeWork();
workHolder.add(new EasyWork());
workHolder.add(new EasyWork());
workHolder.add(new HardWork("1"));
workHolder.add(new HardWork("2"));
}
}
To enforce uniqueness of childWork
in CompositeWork
in HashSet<>()
where do i implement hashcode()
and equals()
?
Does that occur in Work interface?
CompositeWork class?
or is it implemented inside EasyWork and HardWork?