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);
}