add explanation for procedure factory class