装饰模式:
不改变原有对象功能的基础之上进行扩展,
1.面向抽象component
2.实体组件 concretComponent
3.Decrator: 一般实现为一个抽象类
4.具体装饰concreateDecrator
以log日志文件格式改变为例。将log日志文件的格式以json格式输出、
public class DecoratorLogger implements Logger {
public Logger logger;
public DecoratorLogger(Logger logger) {
this.logger = logger;
}
@Override
public String getName() {
return null;
}
。。。。
}
public class JsonLogger extends DecoratorLogger {
public JsonLogger(Logger logger) {
super(logger);
}
@Override
public void error(String s) {
JSONObject jsonObject = newJsonObject();
jsonObject.put("错误信息", s);
logger.error(jsonObject.toJSONString());
}
@Override
public void error(Marker marker, String s, Object o) {
super.error(marker, s, o);
}
public JSONObject newJsonObject() {
return new JSONObject();
}
}
public class JsonLoggerFactory {
public static JsonLogger getLogger(Class clazz) {
Logger logger = LoggerFactory.getLogger(clazz);
return new JsonLogger(logger);
}
}
装饰漆和代理模式对比:
1.装饰漆强调与自身的扩展。动态代理强调代理过程的控制