我有以下服务课程:
accountservice类:
public class AccountService {
public createAccount(argumentsList1);
public closeAccount(argumentsList2);
//many other methods
}
servicehandler类:
public class ServiceHandler {//ServiceHandler is singleton
SavingsAccountService savingsAccountService;//SavingsAccountService implements AccountService
LoanAccountService loanAccountService;//LoanAccountService implements AccountService
public AccountService getService(boolean isSavings) {
if(isSavings) {
return savingsAccountService;
} else {
return loanAccountService;
}
}
}
另外,我有很多不同类型的服务,比如 ABCService
, XYZService
等等。。哪个调用 ServiceHandler
首先获取accountservice的运行时对象,然后调用相应的方法,如下例所示:
ABC服务类:
public class ABCService {
public void process1(boolean isSavingsAccount, a, b, c, arguments..) {
AccountService accountService = ServiceHandler.getService(isSavingsAccount);
accountService.createAccount(argumentsList1);
}
}
XYZ服务类:
public class XYZService {
public void process2(boolean isSavingsAccount, d, e, f, argumemts...) {
AccountService accountService = ServiceHandler.getService(isSavingsAccount);
accountService.closeAccount(argumentsList2);
}
}
还有很多其他服务,比如 PQRService
(类似于 ABCService
, XYZService
)等等。。在这里,我不喜欢把电话复制到 ServiceHandler.getService(isSavingsAccount)
所有其他服务(如 ABCService
,等…)首先获取句柄,然后进一步调用所需的方法 createAccount()
, closeAccount()
等等。。我怎样才能揭露 AccountService
通过 ServiceHandler
自己(以便我可以打电话 createAccount()
只有一行代码?请注意 ServiceHandler
是单例类,应该是线程安全的。
是否有任何特定的设计模式,我可以用来消除上述重复?
1条答案
按热度按时间ua4mk5z41#
只需使用
Dependency Injection
原理使您的所有服务都依赖于超类型
AccountService
计算getService(isSavings)
只有一次来确定所需的混凝土AccountService
伊蒂尔SavingsAccountService
或者LoanAccountService
运行时将此注入到您的服务中
更多说明的示例代码
ABC服务类:
XYZ服务类:
提示:
如果你需要客户通过
isSavings
每次运行时都使用布尔参数,因此您的解决方案符合要求主要是你申请的
Factory method Design pattern
,只需重命名ServiceHandler
类到AccountServiceFactory
更具可读性