Example implementations of several common software design patterns in Java