I have multiple service classes ServiceTest1, ServiceTest2, SeviceTest3
I have a factory class UserFactory, which creates a new User instance on every request
UserFactory has a method createUser() which gets called for every request
Currently, createUser looks something like this
public User createUser(){
return new User(new ServiceTest1(), new ServiceTest2(), new SeviceTest3());
}
These
Serviceclasses are stateless though, so I want to avoid creating a new instance on every request,There might be more
Seviceclasses in future, I want to avoid cluttering the constructor with too many parameters
What would be the good practice to fix this?
Is it good if I let these Service classes be singleton classes? and have a new class named ServiceFactory, which provides these singleton services
and then, I can just place the ServiceFactory instance in the constructor new User(ServiceFactoy.getInstance())
CodePudding user response:
How about creating private static final ServiceTest in User class ?
Since the Services are stateless, just put them in to User, so you won't have too many parameters even if you have a new Service. Also, you won't create Service instance on every request.
public class User {
private static final ServiceTest1 serviceTest1 = new ServiceTest1();
private static final ServiceTest2 serviceTest2 = new ServiceTest2();
// ...
}
CodePudding user response:
I like the idea with the ServiceFactory, but I would definitely not use a singleton. You could use an interface as parameter type. This interface can then be implemented by your UserFactory or a member of it.
Your classes can easily be tested with mocks. Whether a service is reused or not (may change in future), is up to the implementation of the interface:
public class UserFactory {
...
public UserFactory(ServiceRegistry registry) {
this.registry = registry;
public User createUser() {
return new User(registry);
}
...
}
public interface ServiceRegistry {
ServiceTest1 getServiceTest1()
...
}
