Observer Pattern: a one-to-many relationship between a set of objects. When the state of one object changes, all of its dependents are notified.
Design Principle: Strive for loosely coupled designs between objects that interact.
Decorator Pattern: classes should be open for extension, but closed for modification
Factory Pattern Pattern: defines an interface for creating an object, but lets sub classes decide which class to instantiate. Factory method lets a class defer instantiation to sub classes.
Design Principle: Depend upon abstractions. Do not depend upon concrete classes.
Abstract Factory Pattern: provides an interface for creating families of related or dependent objects without specifying their concrete classes.
Singleton Pattern : ensure a class has only one instance, and provides a global point of access to it,