Java 重用函数时使用什么模式
所以我想重用一些功能,比如Java 重用函数时使用什么模式,java,oop,design-patterns,callback,Java,Oop,Design Patterns,Callback,所以我想重用一些功能,比如try-catch,以及我的应用程序使用的一些其他常见功能。我想知道这种方法是否可行。或者,如果有任何其他方法,这将是伟大的。我想学习如何实现这一点的不同方法 这是服务将使用的回调函数 public interface ClientOperation <T>{ T doAction(SomeObject someObject); } Executor的实现类 public class ExecutorImpl implemen
try-catch
,以及我的应用程序使用的一些其他常见功能。我想知道这种方法是否可行。或者,如果有任何其他方法,这将是伟大的。我想学习如何实现这一点的不同方法
这是服务将使用的回调函数
public interface ClientOperation <T>{
T doAction(SomeObject someObject);
}
Executor的实现类
public class ExecutorImpl implements Executor {
public <T> T doTask(ClientOperation<T> operation) {
T response = null;
/*
DO SOMETHING FIRST - USED BY ALL CLASSES
*/
try {
response = operation.doAction(someObject);
} catch (SomeException e) {
/*
DO SOME SERIOUS STUFF
*/
} catch (Exception e) {
LOGGER.error(e.getMessage());
throw new SystemException(e.getMessage(), e);
}
return response;
}
}
公共类executompl实现Executor{
公共T点任务(客户端操作){
T反应=null;
/*
做一些所有班级都首先使用的事情
*/
试一试{
response=operation.doAction(someObject);
}捕获(某些例外){
/*
做一些严肃的事情
*/
}捕获(例外e){
LOGGER.error(例如getMessage());
抛出新的系统异常(e.getMessage(),e);
}
返回响应;
}
}
执行某些操作并实现回调函数的服务
public void addSomething(final Secret secret)
throws UnauthorizedActionException, InvalidSecretKeyException {
executorService.doTask(new ClientOperation<Response>() {
public Response doAction(SomeObject someObject) {
//DO STUFF ON THIS
return template.write(secret.getPath(),
secret.getSecretValue());
}
});
}
public void addSomething(最终机密)
引发UnauthorizedActionException,InvalidSecretKeyException{
executorService.doTask(新ClientOperation()){
公共响应doAction(SomeObject SomeObject){
//在这上面做点什么
返回template.write(secret.getPath(),
secret.getSecretValue());
}
});
}
我想学习如何实现这一点的不同方法
你的方法似乎很好。我会更进一步,使输入(即SomeObject
)也成为通用的,以便ClientOperation
可以处理不同的输入类型
public interface ClientOperation <T,S>{
T doAction(S someObject);
}
公共接口客户端操作{
T doAction(S someObject);
}
另一种方法是使用模式,将ClientOperation
转换为abstract
类,使用abstract
doAction
方法和具体的final
doTask
方法,在try-catch
块中调用doAction
。子类提供了doAction
方法的实现。这种方法的一个缺点是无法从任何其他类进行扩展。太好了!谢谢你的反馈。我还认为模板方法也将具体的子类限制为1个实现方法。
public interface ClientOperation <T,S>{
T doAction(S someObject);
}