Created
November 24, 2023 13:56
-
-
Save sunmeat/861a6f4429da5620de2d07b26b95fbb6 to your computer and use it in GitHub Desktop.
singleton logger C# example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Logger | |
{ | |
private static Logger instance; // 1) приватная статическая ссылка на единственный экземпляр класса | |
private int logCount = 0; // сколько раз происходила запись строки в файл | |
private Logger() // 2) конструктор - приватный (запрещает создавать объекты за пределами класса) | |
{ | |
} | |
public static Logger GetInstance() // 3) публичный статический геттер на получение единственного объекта | |
{ | |
// если объекта журнала не существует - он создаётся | |
return instance ?? (instance = new Logger()); | |
} | |
public void Write(string message) // записать в журнал строку текста | |
{ | |
logCount++; | |
Console.WriteLine($"{logCount}: {message}"); | |
// записать строку в файл | |
using (StreamWriter outputFile = new StreamWriter("log.txt", true)) | |
{ | |
outputFile.WriteLine(message); | |
} | |
} | |
public void Write(int value) | |
{ | |
Write(value.ToString()); | |
} | |
} | |
class HardProcessor | |
{ | |
private int start; | |
public HardProcessor(int start) | |
{ | |
this.start = start; | |
Logger.GetInstance().Write("Processor has been created."); // логируем начало работы | |
} | |
public int ProcessTo(int end) | |
{ | |
int sum = 0; | |
for (int i = start; i <= end; i++) | |
{ | |
sum += i; | |
Logger.GetInstance().Write("In progress..."); | |
Logger.GetInstance().Write(i); | |
} | |
Logger.GetInstance().Write("Processor just calculated value: "); | |
Logger.GetInstance().Write(sum); | |
return sum; | |
} | |
} | |
class Program | |
{ | |
public static void DoHardWork() | |
{ | |
var logger = Logger.GetInstance(); | |
HardProcessor processor = new HardProcessor(1); // начало диапазона | |
logger.Write("Hard work started..."); // первая запись в журнал | |
processor.ProcessTo(5); // конец диапазона | |
logger.Write("Hard work finished!"); // последняя запись в журнал | |
} | |
static void Main() | |
{ | |
DoHardWork(); // вызов метода (объект здесь не нужен) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment