-
The
Component
:
public interface Logger {
void log();
}
-
The
Concrete Component
:
public class FileLogger implements Logger {
public void log() {
System.out.println("FileLogger-log");
}
}
-
The
Decorator
:
public abstract class CustomLogger implements Logger {
private final Logger logger = new FileLogger();
public void log() {
logger.log();
}
}
-
The
Concrete Decorator
:
public class AuditLogger extends CustomLogger {
public void log() {
super.log();
System.out.println("AuditLogger-log");
}
}
-
A simple class to test the
Decorator
design pattern:
public class DecoratorPatternTest {
public static void main(String[] args) {
// create the decorator
final Logger logger = new AuditLogger();
// call the decorated method
logger.log();
}
}