add interfaces for Factory and Client in order to allow users to mock