add factory, builder, and singleton