C# Наследование. ООП SOLID

Я занимаюсь программированием уже 5 лет.. И решил про качаться, изучив наследование. Параллельно изучаю принципы ООП (SOLID). Пишу я под C# Unity. У меня есть портированый (переписанный мной заново) класс фильтрации от Гайвера. Я понял что такое абстрактные классы и статические. Имею представление об интерфейсах (в деле еще не пробовал). НО: У меня на данный момент имеется 5 фильтраций.. У каждой фильтрации разное количество настроек. Все настройки от каждого вида фильтрации я поместил в главный абстрактный класс AFilters:

abstract  class AFilters
{
    public static float _oldValue = 0;
    public static float _k = 0, _q = 0.1f, _measure = 0.8f;
    public static int _stack_Count = 3;
    public AFilters(float k, float measure, float q, int stack_Count)
    {
        SetNewSettings(k, measure, q, stack_Count);
    }
    public static void SetNewSettings(float k, float measure, float q, int stack_Count)
    {
        if (k < 0f || k > 1f) Debug.LogError("SortRunningAverage is not working \n Set old Value");
        else _k = k;
        if (measure == 0 || q == 0) Debug.LogError("Kalman is not working \n Set old Value ");
        else _measure = measure;
        if (q > 1 || q < 0.001f) Debug.LogError("Kalman is not working \n Set old Value");
        else _q = q;
        if (stack_Count == 0 || stack_Count == 1) Debug.LogError("Arifmetics and Middle is not working \n Set old Value");
        else _stack_Count = stack_Count;
    }
    public abstract float CalcuateNewValue(float _newValue);
}

Это не правильно по принципам ООП. По этому хотелось бы узнать, как можно вынести настройки каждой отдельной фильтрации в отдельный класс/интерфейс (в общем способ)? Для примерного понимания как у меня все устроено приведу пример реализации одного вида фильтраци:

class RunningAverage : AFilters
{
    private List<float> Data;
    public RunningAverage() : base(AFilters._k, AFilters._measure, AFilters._q, _stack_Count) { }
    public override float CalcuateNewValue(float _newValue)
    {
        _oldValue += (_newValue - _oldValue) * _k;
        return _oldValue;
    }
}

Так же часть связующего класса всех этих способов фильтрации

public static int count = 0;
public static FiltrsMetod FiltrMetode
{
    get
    {
       return  (FiltrsMetod) count ;
    } 
    set
    {
        count = (int) value;
    }
}
public enum FiltrsMetod
{
    Arifmetics,
    RunningAverage,
    Middle,
    Kalman,
    Midle_Arifmetics,
    Midle_Kalman
}

private static AFilters[] Filterses =
{
    new ArifmeticsFiltr(),
    new RunningAverage(),
    new MiddleFiltr(),
    new KalmanFiltr(),
    new Middle_ArifmeticsFiltr(), 
    new Middle_KalmanFiltr()
};

static AFilters FiltrSelected
{
    get { return Filterses[count]; }
}
public float CalcuateNewValue(float value)
{

    return FiltrSelected.CalcuateNewValue(value);
}

Ответы (0 шт):