What I have learned in the first chapter:
Design principle (1) : Separate what varies from what not vary
(2) program to interface, instead of implementation
(3) Favor composition over inheritance: time spent after development, like maintaining and extension costs more time than developing itself. Thus we should not emphasize reuse over maintainability and extensibility. Composition is a better way to achieve code reuse because it is a better compromise between code reuse and maintainability. Another problem with inheritance not mentioned in this textbook, as it is not related with design pattern, is diamond problem, which is talked about in another article posted in my blog (copied from wikepedia)
The Strategy pattern used in the first example, SimuDuck, is defined as: “The strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.”
The set of class that implements the interface “flybehavior”, “quackbehavior”, is a set of algorithm encapsulated.
Most patterns and principles address issues of change in software.
Most patterns allow some part of a system to vary independently of all other parts.