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.
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
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
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:
- 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
- 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
- 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
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>
<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>
<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>