A rich, delightful post from Joel Neely on an alternative to returning null to signal "not found" or "No": have the caller supply a callback with appropriate methods for condition signaling. In Java:
interface Found {
void present(final String name);
void absent(final String name);
}
class Phonebook {
private final Set<String> names = new HashSet<>;
void add(final String name) {
names.add(name);
}
void remove(final String name) {
names.remove(name);
}
void find(final String name, final Found found) {
if (names.contains(name))
found.present(name);
else
found.absent(name);
}
}
class LookupPhone extends Phone implements Found {
private final Phonebook phonebook;
LookupPhone(final Phonebook phonebook) {
this.phonebook = phonebook;
}
@Override
public void present(final String name) {
ringUp(name);
}
@Override
public void absent(final String name) {
complainIsUnknown(name);
}
void placeCall(final String name) {
phonebook.find(name, this);
}
} (Keyed directly into the editor: apologies for typos.)
No comments:
Post a Comment