-
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
-
Since changing interfaces breaks clients you should consider them as immutable once you've published them.
-
Design patterns should not be applied indiscriminately. Often they achieve flexibility and variability by introducing additional levels of indirection, and that can complicate a design and/or cost you some performance. A design pattern should only be applied when the flexibility it affords is actually needed.
-
A design that doesn’t take change into account risks major redesign in the future.
-
Design Patterns - Elements of Reusable Object-Oriented Software.