At first glance, the composite pattern might seem very similar to the builder pattern, as both build complex objects out of smaller ones. There is, however, a significant difference in the approach these patterns take. Builders work in a very linear fashion, adding objects one at a time. The composite pattern, on the other hand, can add groups of objects as well as individual ones. More importantly, it does so in such a way that the client can add individual objects or groups of objects without having to concern itself with which it is dealing with. In other words, we can add completed layouts, individual views, or groups of views with exactly the same code.
Along with the ability to compose branching data structures, the ability to hide from the client the details of the objects being manipulated is what makes the composer pattern so powerful.
Before creating a layout composer, we will take a look at the pattern itself, applied to a very simple model, so that we can...