21 Design Patterns
http://www.tutorialspoint.com/design_pattern/index.htm
Javian: Adapter: works as a bridge between api (e.g., between two incompatible api)
Javian: Builder: builds a complex obj with static method or builder's constructor. this will avoid error-prone constructor with too many arguments
Wenpu: Command pattern: create a command object that contains information to perform task to be called at a later time
Jarek: DAO object that provides an abstract interface to some type of database or other persistence mechanism
Michael: Dependency Injection: Same as IOC. An object does not care about its dependencies as they are injected via config etc and are easily swappable
Waleed: Facade: Hide complex design, simple interface helps in loosely coupled applications
Tracy: Iterator: Allows client to traverse a collection without knowledge of the structure.
Waleed: Observer: Object called subject maintains a list of dependents called observers and notifies them automatically in case of state change.
Wenpu: Producer-consumer: separates identification of tasks from its execution by implementing as producer and consumers
Todd: Proxy: class acts as an interface/in place of something.
Ian: Service Locator: encapsulate looking up of remote service, possibly cache the lookup, and handle exceptions for it.
Tracy: Singleton: Guarantees an object can only be instantiate once.
Jarek: Strategy is a software design pattern that enables an algorithm's behavior to be selected at runtime
Michael: Template Method: Abstract Classes provide template methods to be overridden by subclasses