add Singleton pattern and Object Pool Pattern