add design pattern singleton