23 design patterns accomplished with Java