singleton pattern
command pattern