Structurally, the Adapter pattern is a class that implements an interface by (a small transformation and) delegating to another class. However, this class structure is useful for more than just connecting two slightly-incompatible interfaces together. A pipeline of adapters is sometimes an excellent way of decomposing a computation. For example, it is a reasonable design for a compiler. This pattern is good for testability. In unit tests, one can test each section of the pipeline individually. In debugging integration problems, one can listen at any boundary by writing a decorator for that boundary's interface. If some of the interfaces are the same, it may allow arranging the sections of the pipeline in a different order.