Understand how Design Patterns can solve Problems.
Elements of Design Pattern, Intent, Motivation, Applicability, Structure
Design patterns themselves follow a pattern (a "meta-pattern," if you will). Each pattern has:
Programming by Contract
Encapsulation makes it possible to produce dramatically more reliable code than the traditional programming style in which every function was able to modify data fields.
Once we ensure that all constructors of a class create only objects with valid state and that all mutator operations preserve the valid state, then we can never have invalid objects.
No operation should waste a lot of time checking for invalid objects. Bertrand Meyer, the pioneering designer of the Eiffel language, uses the metaphor of a contract to describe these guarantees.
This chapter explores the ideas surrounding the concepts of programming by contract.
We all know the value of design experience. How many times have you had the feeling that you have solved a problem before but not knowing exactly where or how? If you could remember the details of the previous problem and how you solved it, then you could reuse the experience instead of rediscovering it.
However, we do not do a good job of recording experience in software design for others to use.
Each design pattern systematically names and evaluates an important and recurring design in object-oriented systems.
Our goal is to capture design experience in a form that people can use effectively. To this end gofpatterns.com has documented some of the most important design patterns and presents them as a catalog.
Design patterns make it easier to reuse successful designs and architectures. Expressing proven techniques as design patterns makes them more accessible to developers of new systems.
Design patterns help you choose design alternatives that make a system reusable and avoid alternatives that compromise reusability. Design patterns can even improve the documentation and maintenance of existing systems by furnishing an explicit specification of class and object interactions
and their underlying intent. Put simply, design patterns help a designer get a design "right" faster.