Java 替换util类的最佳模式
我有一个类似于Java 替换util类的最佳模式,java,android,design-patterns,Java,Android,Design Patterns,我有一个类似于util的类,它包含所有准备和调用请求(我希望轻松管理请求)。例: 但这种设计的问题是,在LoginFragment中,我可以调用Register request,而在RegisterFragment中,我可以调用Login request。那么,创建这个util类是一个糟糕的解决方案吗?是否有一种模式可以解决我的问题 那么,创建这个util类是一个糟糕的解决方案吗 Util类不会将处理委托给其他类。他们处理输入,进行一些计算并返回结果。在您的示例中,您将任务从util委托给服务类
util
的类,它包含所有准备和调用请求(我希望轻松管理请求)。例:
但这种设计的问题是,在LoginFragment
中,我可以调用Register request
,而在RegisterFragment
中,我可以调用Login request
。那么,创建这个util
类是一个糟糕的解决方案吗?是否有一种模式可以解决我的问题
那么,创建这个util类是一个糟糕的解决方案吗
Util
类不会将处理委托给其他类。他们处理输入,进行一些计算并返回结果。在您的示例中,您将任务从util委托给服务类。那是不对的。相反,服务类应该调用util方法
而且,UTIL不应该有业务逻辑。看看课堂
那么,创建这个util类是一个糟糕的解决方案吗
Util
类不会将处理委托给其他类。他们处理输入,进行一些计算并返回结果。在您的示例中,您将任务从util委托给服务类。那是不对的。相反,服务类应该调用util方法
而且,UTIL不应该有业务逻辑。看看类。其中一个解决方案可以是针对您的类的两个不同接口:
class RequestManager implemets LoginRequest, RegistrationRequest{
@Override //method from LoginRequest
public void reqLogin(String emailAddress, String password) {
JsonRequestBody parameters = new JsonRequestBody();
parameters.put(USER_NAME, emailAddress);
parameters.put(PASSWORD, password);
mService.login(parameters.createRequestBody());
}
@Override //method from RegistrationRequest
public void reqRegister(LocationWrapper location) {
JsonRequestBody jsonRequestBody = new JsonRequestBody();
jsonRequestBody.put(DEVICE_TOKEN, "myToken");
jsonRequestBody.put(DEVICE_TOKEN_TYPE, "type");
mService.register(jsonRequestBody.createRequestBody());
}
}
另一个解决方案可能只是两个单独的类来进行登录和注册
如上所述,该类不是Utils类,它更像是网络处理器或请求管理器。其中一个解决方案可以是您的类的两个不同接口:
class RequestManager implemets LoginRequest, RegistrationRequest{
@Override //method from LoginRequest
public void reqLogin(String emailAddress, String password) {
JsonRequestBody parameters = new JsonRequestBody();
parameters.put(USER_NAME, emailAddress);
parameters.put(PASSWORD, password);
mService.login(parameters.createRequestBody());
}
@Override //method from RegistrationRequest
public void reqRegister(LocationWrapper location) {
JsonRequestBody jsonRequestBody = new JsonRequestBody();
jsonRequestBody.put(DEVICE_TOKEN, "myToken");
jsonRequestBody.put(DEVICE_TOKEN_TYPE, "type");
mService.register(jsonRequestBody.createRequestBody());
}
}
另一个解决方案可能只是两个单独的类来进行登录和注册
如上所述,这个类不是Utils类,它更像是网络处理器或请求管理器。为了避免在有60个API调用之后出现反模式,例如,您可以使用类似于命令
设计模式的东西
interface APIOperation {
void execute();
}
class LoginAPIOperation implements APIOperation {
private final String mEmail, mPass;
public LoginAPIOperation(String emailAddress, String password) {
mEmail = emailAddress;
mPass = password;
}
public void execute() {
JsonRequestBody parameters = new JsonRequestBody();
parameters.put(USER_NAME, mEmail);
parameters.put(PASSWORD, mPass);
mService.login(parameters.createRequestBody());
}
}
new LoginAPIOperation("user@gmail.com","qwerty").execute();
您可以在不同的类中重用它。为了避免在您有60个API调用之后出现反模式,例如,您可以使用类似于命令
设计模式的东西
interface APIOperation {
void execute();
}
class LoginAPIOperation implements APIOperation {
private final String mEmail, mPass;
public LoginAPIOperation(String emailAddress, String password) {
mEmail = emailAddress;
mPass = password;
}
public void execute() {
JsonRequestBody parameters = new JsonRequestBody();
parameters.put(USER_NAME, mEmail);
parameters.put(PASSWORD, mPass);
mService.login(parameters.createRequestBody());
}
}
new LoginAPIOperation("user@gmail.com","qwerty").execute();
您可以在不同的类中重用它。谢谢您的回复,但是如果有很多接口需要,这就不好了used@JohnSteve你能解释一下为什么这对你不好吗?在不同的类中,对象的行为只与您指定的接口的确切实例类似。我认为最好的选择是将所有关于请求的功能保留在一个类中,但只通过接口向客户端显示部分功能。@约翰斯蒂夫另一个选择是创建RequestManager的子类,并请求它们:RequestManager.provideLoginRequestManager(),它将是内部类(因此RequestManager的所有上下文对它都是可见的,但又被其他类屏蔽了)假设我有30个接口,作为您的实现,RequestManager
必须实现太多的接口
。谢谢!谢谢您的回复,但是如果有很多接口,那就不好了used@JohnSteve你能解释一下为什么它对你不好吗?在不同的类中,你的对象只起到t的一个精确实例的作用您已分配的接口。我认为最好的选择是将有关请求的所有功能保留在一个类中,但仅通过接口向客户端显示部分功能。@约翰斯蒂夫另一个选择是创建RequestManager的子类,并请求它们:RequestManager.provideLoginRequestManager(),这将是内部类(因此RequestManager的所有上下文对它都是可见的,但又被其他类屏蔽了)假设我有30个接口,就像你的实现一样,RequestManager
必须实现太多的接口
。谢谢!谢谢,你的答案对我来说是明确的。但是,假设这个类不是@Lebedevsd所说的util
,你能建议我如何解决我的问题吗?我想把所有请求分组在一个类中。谢谢s、 你的答案对我来说是明确的。但是,假设这个类不是@Lebedevsd所说的util
,你能建议我如何解决我的问题吗?我想将所有请求分组在一个类中。