Engineering
===========

Design Patterns
---------------

In **software engineering**, a [**design pattern**](http://en.wikipedia.org/wiki/Software_design_pattern) is a general reusable solution to a commonly occurring problem within a given context in software design (solution to a common software problem). A **design pattern** is not a finished design that can be transformed directly into source or machine code.

In **software engineering**, the [**singleton pattern**](http://en.wikipedia.org/wiki/Singleton_pattern) is a design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system.

Engineering
===========

Design Patterns
---------------

In **software engineering**, a [**design pattern**](http://en.wikipedia.org/wiki/Software_design_pattern) is a general reusable solution to a commonly occurring problem within a given context in software design (solution to a common software problem). A **design pattern** is not a finished design that can be transformed directly into source or machine code.

In software engineering, the [**singleton pattern**](http://en.wikipedia.org/wiki/Singleton_pattern) is a design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system.

The [**observer pattern**](http://en.wikipedia.org/wiki/Observer_pattern) is a software design pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods.

In class-based programming, the [**factory method pattern**](http://en.wikipedia.org/wiki/Factory_method_pattern) is a creational pattern which uses factory methods to deal with the problem of creating objects without specifying the exact class of object that will be created.

Add Observer and Factory patterns
Add Observer and Factory patterns