using System;
public interface IMessageOutput
{
void Out(string message);
}
public class ConsoleMessageOutput : IMessageOutput
{
public void Out(string message)
{
Console.WriteLine(message);
}
}
public class ExtendedConsoleOutput : IMessageOutput
{
public void Out(string message)
{
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + " " + message);
}
}
public class Worker
{
private IMessageOutput _output;
public Worker(IMessageOutput output)
{
_output = output;
}
public void DoWork()
{
for(int i = 0; i < 10; i++)
{
_output.Out("Counter: " + i);
}
}
}
public class Test
{
public static void Main()
{
Worker worker = new Worker(new ConsoleMessageOutput());
worker.DoWork();
Worker worker2 = new Worker(new ExtendedConsoleOutput());
worker2.DoWork();
// your code goes here
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGludGVyZmFjZSBJTWVzc2FnZU91dHB1dAp7Cgl2b2lkIE91dChzdHJpbmcgbWVzc2FnZSk7Cn0KCnB1YmxpYyBjbGFzcyBDb25zb2xlTWVzc2FnZU91dHB1dCA6IElNZXNzYWdlT3V0cHV0CnsKCXB1YmxpYyB2b2lkIE91dChzdHJpbmcgbWVzc2FnZSkKCXsKCQlDb25zb2xlLldyaXRlTGluZShtZXNzYWdlKTsKCX0KfQoKcHVibGljIGNsYXNzIEV4dGVuZGVkQ29uc29sZU91dHB1dCA6IElNZXNzYWdlT3V0cHV0CnsKCXB1YmxpYyB2b2lkIE91dChzdHJpbmcgbWVzc2FnZSkKCXsKCQlDb25zb2xlLldyaXRlTGluZShEYXRlVGltZS5Ob3cuVG9TdHJpbmcoIkhIOm1tOnNzIikgKyAiICIgKyBtZXNzYWdlKTsKCX0KfQoKcHVibGljIGNsYXNzIFdvcmtlcgp7Cglwcml2YXRlIElNZXNzYWdlT3V0cHV0IF9vdXRwdXQ7CglwdWJsaWMgV29ya2VyKElNZXNzYWdlT3V0cHV0IG91dHB1dCkKCXsKCQlfb3V0cHV0ID0gb3V0cHV0OwoJfQoJCglwdWJsaWMgdm9pZCBEb1dvcmsoKQoJewoJCWZvcihpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKQoJCXsKCQkJX291dHB1dC5PdXQoIkNvdW50ZXI6ICIgKyBpKTsKCQl9Cgl9Cn0KCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlXb3JrZXIgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgQ29uc29sZU1lc3NhZ2VPdXRwdXQoKSk7CgkJd29ya2VyLkRvV29yaygpOwoJCQoJCVdvcmtlciB3b3JrZXIyID0gbmV3IFdvcmtlcihuZXcgRXh0ZW5kZWRDb25zb2xlT3V0cHV0KCkpOwoJCXdvcmtlcjIuRG9Xb3JrKCk7CgkJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJfQp9