23 Java design patterns implementation