The template pattern
Even if you are entirely new to design patterns, you will be familiar with how the template pattern works, as it employs abstract classes and methods to form a generalized (template) solution that can be used to create specialized subclasses in precisely the way that abstraction is intended to be used in OOP.
At its very simplest, the template pattern is nothing more than a generalization in the form of an abstract class with at least one concrete realization. For example, a template might define an empty layout and its realizations then control the content. One big advantage of this approach is that common elements and shared logic need only be defined in the base class, meaning that we only need to write code where our realizations differ from each other.
Template patterns can become even more powerful and flexible if another layer of abstraction is added in the form of specializations of the base class. These can then be used as sub-categories of their parent classes...