0

仮定:
単純なモジュール式の Java ライブラリには、次の 2 つのモジュールしかありません。

package com.mycorp.lib.logger;
public class LogcatLogger implements Logger {

    @Override
    public void out(LogcatLogger.LogMessage message){
        Log.i("TAG", message.status);
    }

    ...
}

package com.mycorp.lib.webservice;
public class JsonWebservice implements Webservice {

    @Override
    public void onErrorFound(String status) {
        LogcatLogger.LogMessage message = new LogcatLogger.LogMessage();
        message.status = status;
        LogcatLogger.out(message);
    }

    ...
}

質問: com.mycorp.lib.webservicecom.mycorp.lib.logger
をこのように独立 させるにはどうすればよいですか? ( クライアント アプリケーションもメソッドを呼び出すことができます ) ターゲット デザイン

注:前にコマンドパターン
を試してみました:結果:apiには多くのメソッドがあり、多くのコマンドクラスを作成する必要があります

Update1:より困難な状況のために、 LogcatLoggerのネストされた静的クラスとしてLogMessage
を 追加しました

Update2:
ターゲット デザインの画像を追加しました。

どんな助けでも感謝します。

4

1 に答える 1

1

戦略パターンを使用します。基本的に、LogcatLoggerにカスタムインターフェイスを実装させ、そのインターフェイスをサービスで参照します。

package com.mycorp.lib.invoker;
public interface Logger {
    void out(Loggable message);
}

package com.mycorp.lib.invoker;
public interface Loggable {
    void setStatus(String status);
    String getStatus();
}

package com.mycorp.lib.invoker;
public class LoggableFactory {
    public static Loggable createDatabaseLogMessage() { return new DatabaseLogMessage(); }
    public static Loggable createWebserviceLogMessage() { return new WebserviceLogMessage(); }
}

package com.mycorp.lib.logger;
public class WebserviceLogMessage implements Logger {

    @Override public void out(Loggable message){
        Log.i("TAG", message.getStatus());
    }

    ...
}

package com.mycorp.lib.logger;
public class DatabaseLogMessage implements Logger {
    @Override public void out(Loggable message) {
        Log.i("JDBC",message.getStatus());
        otherFancyStuff(); // whatever ? :)
    }
}

package com.mycorp.lib.webservice;
public class JsonWebservice implements Webservice {
    Logger out;

    JsonWebservice(Logger out) { this.out = out; }

    @Override
    public void onErrorFound(String status) {
        Loggable message = LoggableFactory.createWebserviceLogMessage();
        message.setStatus(status);
        out.out(message);
    }

    ...
}
于 2012-08-03T19:23:03.740 に答える