C++ Design Pattern: What is a Design Pattern?
Q: What is a Design Pattern?
A: Design Patterns represent solutions to problems what arise when developing software within a particular context.
Quote:
Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.
C. Alexander, The Timeless Way of Building, 1979
Quote:
Patterns help you learn from other's successes, instead of your own failures.
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
http://www.codeguru.com/img/FAQ/327982/patterns.gif
Q: What are good books about design patterns.
A: Here are some must-have books:
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
<br><br>
Re: C++ Design Pattern: What is a Design Pattern?
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:
<a href="http://www.oodesign.com/oo_principles/oo_principles/open_close_principle.html">Open Close Principle</a>
<a href="http://www.oodesign.com/oo_principles/oo_principles/dependency_inversion_principle.html" >Dependency Inversion Principle</a>
<a href="http://www.oodesign.com/oo_principles/oo_principles/interface_sergregation_principle.html" >Interface Sergregation Principle</a>
<a href="http://www.oodesign.com/oo_principles/oo_principles/single_responsibility_principle.html" >Single Responsibility Principle</a>
<a href="http://www.oodesign.com/oo_principles/oo_principles/liskov's_substitution_principle.html" >Liskov's Substitution Principle</a>
Creational Patterns:
<a href="http://www.oodesign.com/oo_design_patterns/creational_patterns/singleton.html" >Singleton</a>
<a href="http://www.oodesign.com/oo_design_patterns/creational_patterns/factory.html" >Factory</a>
<a href="http://www.oodesign.com/oo_design_patterns/creational_patterns/factory_method.html" >Factory Method</a>
<a href="http://www.oodesign.com/oo_design_patterns/creational_patterns/abstract_factory.html" >Abstract Factory</a>
<a href="http://www.oodesign.com/oo_design_patterns/creational_patterns/builder.html" >Builder</a>
<a href="http://www.oodesign.com/oo_design_patterns/creational_patterns/prototype.html" >Prototype</a>
<a href="http://www.oodesign.com/oo_design_patterns/creational_patterns/object_pool.html" >Object Pool</a>
Behavioral Patterns:
<a href="http://www.oodesign.com/oo_design_patterns/behavioral_patterns/chain_of_responsibility.html" >Chain of Responsibility</a>
<a href="http://www.oodesign.com/oo_design_patterns/behavioral_patterns/command.html" >Command</a>
<a href="http://www.oodesign.com/oo_design_patterns/behavioral_patterns/interpreter.html" >Interpreter</a>
<a href="http://www.oodesign.com/oo_design_patterns/behavioral_patterns/iterator.html" >Iterator</a>
<a href="http://www.oodesign.com/oo_design_patterns/behavioral_patterns/strategy.html" >Strategy</a>
<a href="http://www.oodesign.com/oo_design_patterns/behavioral_patterns/template_method.html" >Template Method</a>
<a href="http://www.oodesign.com/oo_design_patterns/behavioral_patterns/visitor_pattern.html" >Visitor</a>