Q: What is a Design Pattern?
A: Design Patterns represent solutions to problems what arise when developing software within a particular context.
C. Alexander, The Timeless Way of Building, 1979
Mark Johnson (cited by Bruce Eckel)
Q: How many types of design patterns exist?
A: Basically, there are three categories:
- Creational Patterns: deal with initializing and configuring classes and objects
- Structural Patterns: deal with decoupling the interface and implementation of classes and objects
- Behavioral Patterns: deal with dynamic interactions among societies of classes and objects
Q: What are good books about design patterns.
A: Here are some must-have books:
- Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (also known as Gang of Four)
- Thinking in Patterns with Java, by Bruce Eckel
- Thinking in Patterns with C++, by Bruce Eckel
Q: How can I quickly find information about a design pattern?
A: Here are some links on the web:
General
Creational Patterns
-
Abstract Factory: Creates an instance of several families of classes
-
Builder: Separates object construction from its representation
-
Factory Method: Creates an instance of several derived classes
-
Prototype: A fully initialized instance to be copied or cloned
-
Singleton: A class of which only a single instance can exist
Structural Patterns
-
Adapter: Match interfaces of different classes
-
Bridge: Separates an object’s interface from its implementation
-
Composite: A tree structure of simple and composite objects
-
Decorator: Add responsibilities to objects dynamically
-
Façade: A single class that represents an entire subsystem
-
Flyweight: A fine-grained instance used for efficient sharing
-
Proxy: An object representing another object
Behavioral Patterns
-
Chain of Responsibility: A way of passing a request between a chain of objects
-
Command: Encapsulate a command request as an object
-
Interpreter: A way to include language elements in a program
-
Iterator: Sequentially access the elements of a collection
-
Mediator: Defines simplified communication between classes
-
Memento: Capture and restore an object's internal state
-
Observer: A way of notifying change to a number of classes
-
State: Alter an object's behavior when its state changes
-
Strategy: Encapsulates an algorithm inside a class
-
Template Method: Defer the exact steps of an algorithm to a subclass
-
Visitor: Defines a new operation to a class without change
and more resources on (www.oodesign.com). Make sure you read the design principles, it's very usefull for understanding the desing patterns:
OO Design Principles:
Open Close Principle
Dependency Inversion Principle
Interface Sergregation Principle
Single Responsibility Principle
Liskov's Substitution Principle
Creational Patterns:
Singleton
Factory
Factory Method
Abstract Factory
Builder
Prototype
Object Pool
Behavioral Patterns:
Chain of Responsibility
Command
Interpreter
Iterator
Strategy
Template Method
Visitor