KNLOD / DSAInterns

0 stars 0 forks source link

Написать обработчик ЭКГ сигнала с исползьованием паттернов GoF #8

Open KNLOD opened 7 months ago

KNLOD commented 7 months ago

Задание:

Создайте класс с именем EcgProcessor на C#, реализующий паттерн Factory Method для создания экземпляров и паттерн Strategy для алгоритмов. Класс EcgProcessor должен позволять настраивать фильтры и алгоритмы обработки ЭКГ.

  1. Реализовать паттерн Factory Method для создания экземпляров класса EcgProcessor.
  2. Реализовать паттерн Strategy для различных алгоритмов, таких как фильтрация и обработка ЭКГ.
  3. Позволить пользователям настраивать используемые алгоритмы в EcgProcessor.
  4. Включить как минимум два различных алгоритма для фильтрации и обработки ЭКГ.
  5. Предоставить четкие примеры, демонстрирующие использование EcgProcessor.

Пример используемых паттернов на примере класса обработчика данных о погоде: Как можно заметить в классе WeatherProcessor использован прием Внедрения зависимости или же Dependency Injection - хороший прием когда класс прямо зависит от какого-то другого класса мы внедряем его прямо в его конструктор. Тем не менее в отличие от данного примера требуется добавить функционал в фабричный метод по определению методов используя массив из строк.: WeatherProcessorFactory tempRainfallFactory = new TemperatureRainfallFactory({"process-high-humidity", "process-high-wind"}); тогда алгоритмы например можно добавлять по свитчкейсу или if else или вообще написать метод mapper который по строке будет возвращать нужный экземпляр объекта алгоритма.

// Strategy Interface
interface IWeatherAlgorithm
{
    void ProcessWeatherData(List<double> weatherData);
}

// Concrete strategy: Temperature Normalization
class TemperatureNormalization : IWeatherAlgorithm
{
    public void ProcessWeatherData(List<double> weatherData)
    {
        // Implement temperature normalization algorithm
        Console.WriteLine("Normalizing temperature data...");
    }
}

// Concrete strategy: Rainfall Prediction
class RainfallPrediction : IWeatherAlgorithm
{
    public void ProcessWeatherData(List<double> weatherData)
    {
        // Implement rainfall prediction algorithm
        Console.WriteLine("Predicting rainfall...");
    }
}

// Factory Method
abstract class WeatherProcessorFactory
{
    public abstract List<IWeatherAlgorithm> CreateAlgorithms();
}

// Concrete Factory for Temperature Normalization and Rainfall Prediction
class TemperatureRainfallFactory : WeatherProcessorFactory
{
    public override List<IWeatherAlgorithm> CreateAlgorithms()
    {
        List<IWeatherAlgorithm> algorithms = new List<IWeatherAlgorithm>();
        algorithms.Add(new TemperatureNormalization());
        algorithms.Add(new RainfallPrediction());
        return algorithms;
    }
}

// Context class
class WeatherProcessor
{
    private List<IWeatherAlgorithm> algorithms = new List<IWeatherAlgorithm>();

    public WeatherProcessor(WeatherProcessorFactory factory)
    {
        algorithms = factory.CreateAlgorithms();
    }

    public void ProcessWeatherData(List<double> weatherData)
    {
        foreach (var algorithm in algorithms)
        {
            algorithm.ProcessWeatherData(weatherData);
        }
    }
}

}

class Program
{
    static void Main(string[] args)
    {
        // Example usage

        // Creating WeatherProcessor with Temperature Normalization and Rainfall Prediction
        WeatherProcessorFactory tempRainfallFactory = new TemperatureRainfallFactory();
        WeatherProcessor tempRainfallProcessor = new WeatherProcessor(tempRainfallFactory);
        tempRainfallProcessor.ProcessWeatherData(new List<double>());

        Console.ReadLine();
    }
}