Last active
November 9, 2016 00:55
-
-
Save koher/43e8de7d91c4a4596eb91d3dd945ffd6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Arrays; | |
import java.util.List; | |
interface Integer { | |
int getValue(); | |
} | |
final class ConcreteInteger implements Integer { | |
private final int value; | |
ConcreteInteger(int value) { this.value = value; } | |
@Override public int getValue() { return value; } | |
} | |
final class NullInteger implements Integer { | |
private static final NullInteger INSTANCE = new NullInteger(); | |
private NullInteger() {} | |
static NullInteger getInstance() { return INSTANCE; } | |
@Override public int getValue() { return 0; } | |
} | |
interface Reducer { | |
Integer reduce(Integer initial, List<Integer> numbers); | |
} | |
final class SumReducer implements Reducer { | |
@Override public Integer reduce(Integer initial, List<Integer> numbers) { | |
Integer sum = initial; | |
for (final Integer number : numbers) { | |
sum = new ConcreteInteger(sum.getValue() + number.getValue()); | |
} | |
return sum; | |
} | |
} | |
final class ProductReducer implements Reducer { | |
@Override public Integer reduce(Integer initial, List<Integer> numbers) { | |
Integer product = initial; | |
for (final Integer number : numbers) { | |
product = new ConcreteInteger(product.getValue() * number.getValue()); | |
} | |
return product; | |
} | |
} | |
public class NullObjectIsDead { | |
public static void main(String[] args) { | |
final List<Integer> numbers = Arrays.asList( | |
new ConcreteInteger(2), | |
new ConcreteInteger(3), | |
new ConcreteInteger(5) | |
); | |
final List<Reducer> reducers = Arrays.asList( | |
new SumReducer(), | |
new ProductReducer() | |
); | |
for (final Reducer reducer : reducers) { | |
System.out.println(reducer.reduce(NullInteger.getInstance(), numbers).getValue()); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment