Patterns contain classes that describe an Attribute and a set of interfaces determining how to use patterns.