A set of pluggable adapters © Frank Buschmann
The only constant in life is change! This wisdom from the 17th century French author Francçois de la Rochefoucauld seems particularly true of software. Software is a 'living thing.' The ability of applications and components to adapt to specific environments, extend to meet customer-specific requirements, and evolve over their lifetime, can be a deciding factor for their long-term use and success. This chapter presents thirteen patterns that support developers in building software that is open to adaptation, extension, and evolution.
No single profile covers either the types of modern applications developed or the range of customers for which they are developed. Some applications are specifically developed for a single customer, whereas others are developed as products with a mass market in mind. Although some applications are targeted at a single customer, repeat business for the customer—or for similar applications sought by other customers—can motivate and justify the definition of a common base for the applications to built upon. Even if multiple customers can benefit from a particular software system or infrastructure, each often has unique and specific requirements not yet supported by default. For example:
Out-of-band extensions. Customers sometimes request additional algorithms or services that ...