iluwatar / java-design-patterns Java 95K 27K Design patterns implemented in Java java principles design-patterns awesome-list