デザインモードの装飾モード(七)
2022 ワード
一、概念
既存のクラスを修飾して機能を拡張します.
二、実例説明
1、プロジェクトではlog 4 jを使用してログを印刷します.一般的には:
これをjson形式に変換する必要があり、装飾モードを採用することができます.2、コード実現
三、まとめ
装飾モードの核心は装飾にあり、被装飾自体の核心機能に影響を与えない.
既存のクラスを修飾して機能を拡張します.
二、実例説明
1、プロジェクトではlog 4 jを使用してログを印刷します.一般的には:
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
logger.error(msg);
これをjson形式に変換する必要があり、装飾モードを採用することができます.2、コード実現
public class DecoratorLogger implements Logger {
public Logger logger;
public DecoratorLogger(Logger logger) {
this.logger = logger;
}
@Override
public void error(String str) {}
@Override
public void info(String str) {}
//
}
public class JsonLogger extends DecoratorLogger {
public JsonLogger(Logger logger) {
super(logger);
}
@Override
public void info(String msg) {
JSONObject result = composeBasicJsonResult();
result.put("MESSAGE", msg);
logger.info(result.toString());
}
@Override
public void error(String msg) {
JSONObject result = composeBasicJsonResult();
result.put("MESSAGE", msg);
logger.error(result.toString());
}
public void error(Exception e) {
JSONObject result = composeBasicJsonResult();
result.put("EXCEPTION", e.getClass().getName());
String exceptionStackTrace = ExceptionUtils.getStackTrace(e);
result.put("STACKTRACE", exceptionStackTrace);
logger.error(result.toString());
}
public static class JsonLoggerFactory {
@SuppressWarnings("rawtypes")
public static JsonLogger getLogger(Class clazz) {
Logger logger = LoggerFactory.getLogger(clazz);
return new JsonLogger(logger);
}
}
private JSONObject composeBasicJsonResult() {
//
}
}
private static final Logger logger = JsonLoggerFactory.getLogger(Component.class);
logger.error(string);
三、まとめ
装飾モードの核心は装飾にあり、被装飾自体の核心機能に影響を与えない.