add constructor and singleton