add Static Factory Pattern