singleton, command, factory patterns