다른 언어를 선호한다면 pseudo C#을 사용했습니다. 알고 싶습니다.
이렇게하려면 먼저 로깅 인터페이스를 만드십시오. 로깅을 수행하는 모든 객체는 다음을 준수합니다.
public interface Logger
{
void Log(string message);
}
다음으로 로깅 기능을 래핑 할 데코레이터 클래스가 필요합니다. 사람들이 직접 인스턴스화하는 것을 원하지 않는다면 추상적 일 수도 있습니다.
public class LoggerDecorator : Logger
{
Logger logger;
public LoggerDecorator(Logger logger)
{
this.logger = logger;
}
public override void Log(string message)
{
logger.log(message);
}
}
그것은 독립 로거 만들 수있다 : : 그것은 로거 객체 및 프록시이 모든 로그 메시지를 받아
:
public class StdoutLogger : Logger
{
public override void Log(string message)
{
// Log message to stdout
}
}
또는 로거는 단순히 포장 "스택"으로 이러한 당신의 decorator
를 사용하여
public class FileAndStdoutLogger : LoggerDecorator
{
public FileAndStdoutLogger(Logger logger)
{
super(logger);
}
public void log(String message)
{
logger.log(msg);
// Log to file
}
}
그런 다음 사용자가 만들 수있는 독립형 또는 장식 로거 :
var stdoutLogger = new StdoutLogger();
stdoutLogger.log("This will log only to stdout");
// Will output "This will log only to stdout" to stdout
var fileAndStdoutLogger = new FileAndStdoutLogger(new StdoutLogger());
fileAndStdoutLogger.log("This will log to file & stdout");
// Will output "This will log to file & stdout" to file and stdout
추가 사례가 필요한 경우 알려 주시기 바랍니다.
'장식가는 추가 책임을 스스로 지키려는 의도가 아닙니까?'라는 것이 무엇을 의미합니까?장식자는 항상 느슨하게 결합되어야합니다. 그렇지 않으면 코드의 다른 영역에 적용 할 수 있다는 이점을 잃게됩니다. – timothyclifford
내가 읽고 있던 예에서, 데코레이터는 본질적으로 책임을 추가하고 독립적으로 존재할 수는 없다는 것이 설명되었습니다. 나는 그 가정에서 틀렸다는 것을 알게되어 기쁩니다. – Jason