Created
May 27, 2024 07:59
-
-
Save sunmeat/f0a2312f1fb3fbc30a5a8d5a20037bb4 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
namespace SingletonLoggerExample | |
{ | |
public class Logger | |
{ | |
private static Logger? instance; // приватная статическая ссылка на единственный экземпляр класса | |
private int logCount = 0; // сколько раз происходила запись строки в файл | |
private Logger() // приватный конструктор (запрещает создавать объекты за пределами класса) | |
{ | |
} | |
public static Logger GetInstance() // публичный статический геттер на получение единственного объекта | |
{ | |
// если объекта журнала не существует - он создаётся | |
if (instance == null) | |
{ | |
instance = new Logger(); | |
} | |
return instance; | |
} | |
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()); | |
} | |
} | |
public 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; | |
} | |
} | |
public 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