FactoryPattern, SingletonPattern added