Practice implementations of popular design patterns in Java