Dependency Injection, Factory, Singleton, Observer and Strategy