Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created May 27, 2024 07:59
Show Gist options
  • Save sunmeat/f0a2312f1fb3fbc30a5a8d5a20037bb4 to your computer and use it in GitHub Desktop.
Save sunmeat/f0a2312f1fb3fbc30a5a8d5a20037bb4 to your computer and use it in GitHub Desktop.
singleton logger C# example
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