In software engineering, a design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.

Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.

Gang of Four (GoF) patterns are generally considered the foundation for all other patterns. They are categorized in three groups:
1. Creational
2. Structural
3. Behavioral

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

Facade - 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 Resp - 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


Non-Software Examples of Software Design Patterns -

Design Patterns, Pattern Languages, and Frameworks -

Microsoft Application Architecture Guide 2.0 eBook -

Design Patterns Sample Code (C++ & Java) -

Microsoft Architecture Journal -

Microsoft Architecture Journal Reader (Beta) -

Microsoft’s Home for Design patterns & practices –

Inject Some Life into Your Applications: Getting to Know the Unity Application Block -

Design Patterns: Solidify Your C# Application Architecture with Design Patterns –

C++ and the Perils of Double-Checked Locking Design Pattern -

CSharp(C#) Design Patterns(with Sample Code) -

Java Design Patterns -

J2EE Patterns Catalog -

J2EE Design Patterns -

Gopalan Suresh Raj's blog -