(Designing object-oriented software is more difficult, and designing reusable object-oriented software is even more difficult. It is necessary for you to find the relevant objects, classify them with the proper granularity, define the interface and inheritance hierarchy of the class, and establish the basic relationship between the objects. Your design should be specific to the problem at hand, yet general enough to future problems and needs. A collection of 23 design patterns (Java), classic literature.
java design patterns.pdf)