software design patterns
There are three types of software design patterns:
#1: Creational These patterns deal with creation of objects in such a way that they can be de-coupled from their implementation. They are all about class instantiation.
Factory Abstract Factory Builder Prototype Singleton
#2: Structural These patterns deal with composition of different object structures. They are all about class and Object composition.
Adapter Bridge Composite Facade Proxy Decorater FlyWeight
#3: Behavioral These patterns deal with communication between objects. They are all about classes object communication.
Chain of Responsibility: Passes a request among a list or chain of objects.
Command: Wraps a request under an object as a command and passed to invoker object.
Interpreter: Implements an expression interface to interpret a particular context.
Iterator: Provides a way to access the elements of a collection object in sequential manner without knowing its underlying structure.
Mediator: Allows multiple objects to communicate with each other’s without knowing each other’s structure.
Memento: Capture the current state of an object and store it in such a manner that it can be restored at a later time without breaking the rules of encapsulation.
Observer: Allows an object (subject) to publish changes to its state and other objects (observer) that depend upon that object are automatically notified of any changes to the subject's state.
State: Alters the behavior of an object when it’s internal state changes.
Strategy: Allows a client to choose an algorithm from a family of algorithms at run-time and gives it a simple way to access it.
Visitor: Creates and performs new operations onto a set of objects without changing the object structure or classes.
Template Method: Defines the basic steps of an algorithm and allow the implementation of the individual steps to be changed.