Add singleton pattern
Add template pattern