我已经看过这个问题enter link description here
然而,我似乎找不到为什么两个物体之间存在构图的答案指向uml的链接在这里:
任何人都可以向我解释为什么有一个作文?或为什么除了概括之外还应该有什么呢?
答案 0 :(得分:1)
因为装饰器模式的要点是装饰一个包含的组件:
public interface Logger {
void print(String message);
}
public class ConsoleLogger implements Logger {
@Override
public void print(String message) {
System.out.println(message);
}
}
public class FileLogger implements Logger {
@Override
public void print(String message) {
// TODO write the message to a file
}
}
public WithCurrentDateLoggerDecorator implements Logger {
private Logger delegate;
public WithCurrentDateLoggerDecorator(Logger delegate) {
this.delegate = delegate;
}
@Override
public void print(String message) {
message = new Date() + " - " + message;
delegate.print(message);
}
}
使用上面的内容,装饰器可以在任何你使用任何其他记录器的地方使用,而装饰器可以装饰任何类型的记录器(控制台,文件,电子邮件,套接字等等)。它不关心具体记录器的作用(打印到控制台或打印到文件)。它只是装饰具体的记录器,在让委托记录器打印它之前,将当前日期添加到消息中。
如果必须在没有组合(或者更确切地说明)的情况下执行此操作,则必须创建WithCurrentDateFileLogger
和WithCurrentDateConsoleLogger
(为每个具体记录器添加一个子类)。由于组合数量很多,所有其他装饰或具体记录器类型都会使创建的类数量爆炸。