Шаблон может быть либо областью действия класса, либо областью действия объекта. Шаблоны классов - это шаблоны, цели которых реализуются во время компиляции с использованием таких механизмов, как наследование. Эти шаблоны не требуют дополнительной настройки во время выполнения. С другой стороны, шаблоны предметной области, которые являются более распространенными, используют отношения между объектами для достижения своих целей. Шаблоны области объекта, как правило, решают проблемы путем взаимного использования экземпляров различных полиморфных классов. Цель шаблона области объекта не достигается только после компиляции, так как реализация цели зависит от того, какие конкретные объекты создаются и присваиваются некоторым специальным переменным.