2

以下の形式に従う一連のWebサービスメソッド呼び出しがあります。各メソッドの唯一の違いはhttpRequest.methodName()です。誰かが私が共通論理をカプセル化できる方法を考えることができますか?また、私の環境はJ2MEであることに注意してください。

public Response webserviceCall(Request request) {

    HTTPRequest httpRequest = new HTTPRequest(new ConnectionProperties());

    String errorMessage = "";
    String errorCode = "";

    try {
        // the only thing different
        httpRequest.methodName();
    } catch (SDKException e) {
        errorMessage = e.getMessage();
        errorCode = e.getErrorCode();
    }

    Error error = new Error(errorMessage,errorCode);

    return new Response(error);
}
4

1 に答える 1

5

1つの代替方法は、そのコードを抽象クラスに入れ、抽象メソッドを呼び出すように変更することです(たとえば、プロセスという名前を付けます)。

abstract class BaseWebService {
   public abstract Response process(HTTPRequest request) throws SDKException;

   public Response webserviceCall(Request request) {

       HTTPRequest httpRequest = new HTTPRequest(new ConnectionProperties());

       String errorMessage = "";
       String errorCode = "";

       try {
           process(httpRequest);
       } catch (SDKException e) {
           errorMessage = e.getMessage();
           errorCode = e.getErrorCode();
       }

       Error error = new Error(errorMessage,errorCode);

       return new Response(error);
   }
 }

次に、各サービスにそのクラスを拡張させ、必要に応じてprocessメソッドを実装します

class OneService extends BaseWebService {

   Response process(HTTPRequest request) throws SDKException{
        return request.methodName();
   } 
}

レコードの場合、これはテンプレートメソッドパターンです

于 2012-07-20T13:48:00.580 に答える