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);
}