-1
我已經看過這個問題enter link description here裝飾UML解釋組成
但是我似乎無法找到答案,爲什麼有兩個對象
UML的鏈接在這裏之間的組成:
誰能給我解釋一下爲什麼會出現一個組成?或爲什麼除了泛化之外還有其他什麼?
我已經看過這個問題enter link description here裝飾UML解釋組成
但是我似乎無法找到答案,爲什麼有兩個對象
UML的鏈接在這裏之間的組成:
誰能給我解釋一下爲什麼會出現一個組成?或爲什麼除了泛化之外還有其他什麼?
因爲Decorator模式的要點是裝點含有成分:
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
(爲每個具體的記錄器添加一個子類)。由於組合數量多,每種其他裝飾或混凝土記錄器類型都會使要創建的類的數量爆炸。