ログにタイムスタンプとメッセージのプロパティがある場合は、おそらくLogEntryを意味すると思います。
ブリッジパターンは、抽象化を 実装から切り離して、2つが非常に独立しているようにする場合に使用します。私はこれが あなたのケースではないと思います。単にLogEntryをStringとしてフォーマットしたいのであれば、LogEntryを、Stringを返すLogFormatterのメソッドにパラメータとして渡すだけです。
今後ログインするためにプロパティを動的に追加し、LogFormatterのサブクラスを使用してフォーマットする場合は、 が本当に意味するところに応じて、私はデコレータまたは戦略パターンを提案します。
編集: 以下の擬似コードは、一つのログエントリにそのようなスレッドIDとして
interface LogFormatter {
String format(Log);
}
// default implementation
DefaultLogFormatter implements LogFormatter {
String format(Log) {
return Log.getTimestamp() + Log.getMessage();
}
}
// decorated with thread Id
ThreadIdLogFormatter implements LogFormatter {
LogFormatter formatter;
ThreadIdLogFormatter(LogFormatter formatter) {
this.formatter = formatter;
}
String format(Log) {
String threadid = Log.getThreadId();
return formatter.format() + threadid;
}
}
LogFormatter formatterDefault = new DefaultLogFormatter();
LogFormatter formatterThreadId = new ThreadIdLogFormatter(formatterDefault);
Log log = new Log("message");
// 2016-11-28 09:22:07.055 INFO message
String logEntryDefault = formatterDefault.format(log);
// 2016-11-28 09:22:07.055 INFO message (Thread 11)
String logEntryThreadid = formatterThreadId.format(log);
ログ{ は をスレッドID スタンプ メッセージを}プロパティを追加するデコレータでこれを実装する方法の例であります
個人的には抽象LogFormatter(またはインターフェイス)を定義し、Logエントリを何らかの形式のテキスト(行、xml、json、...)にフォーマットするLogFormatterサブクラスを実装するだけです。デザインパターンは素晴らしいですが、この場合はおそらく本当に必要ではありません。
拡張プロパティの合成についてはどうですか?ログには、 'ExtendedLogProperty'のセット、あるいは' Map'だけのセットを保持することができます。これにより、いくつかのプロパティが常に存在し、他のプロパティが失われている間に 'Log'のスキーマの一部であることが明示的になります。この時点で、 'formatlog'の契約を絞り込む必要がないので、LSPの中断はありません。 – plalx
あなたのテクノロジーのロギングライブラリを見つけて、ホイールを再開発しないでください。 – BartoszKP