arkitect.js is a library that aims to help create good software architectures
Abstract: Abstract class may contain a mix of methods declared with or without an implementation. It cannot be instantiated, but they can be subclassed.
Interface: An interface is used to specify a behavior that classes must implement.
Singleton: Singleton pattern restricts the instantiation of a class to one object.